首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对保持XML的空白/缩进进行排序?

对保持XML的空白/缩进进行排序?
EN

Stack Overflow用户
提问于 2013-10-27 09:41:20
回答 2查看 225关注 0票数 1

我有这样的XML格式:

代码语言:javascript
复制
<?xml version="1.0" encoding="Windows-1252"?>
<!--MasterMusik Video Database-->
<Videos>
  <Video><Name>SKRILLEX &amp; WOLFGANG GARTNER - THE DEVIL's DEN</Name><Genre>Techno</Genre><Format>mp4</Format><HD>HD</HD><Resolution>1280x720</Resolution><Size>70,57</Size></Video>
  <Video><Name>4 Strings - Let It Rain</Name><Genre>Dance</Genre><Format>mp4</Format><HD>HD</HD><Resolution>1920x1080</Resolution><Size>129,3</Size></Video>
  <Video><Name>Deadmau5 - I Remember (Live At Roskilde Festival)</Name><Genre>Trance</Genre><Format>mkv</Format><HD>SD</HD><Resolution>704x384</Resolution><Size>97,99</Size></Video>
</Videos>

我想根据元素的“名称”标签对它们进行排序。

这是我用来对元素Sort XML document排序的函数

代码语言:javascript
复制
Private Function XML_Sort(ByVal xdoc As XDocument, _
                          ByVal Root_Element As String, _
                          ByVal Element_to_sort As String) As XDocument

    Try

        xdoc.Root.ReplaceNodes(xdoc.Root.Elements(Root_Element) _
                              .OrderBy(Function(sort) sort.Element(Element_to_sort).Value))

        Return xdoc

    Catch ex As Exception
        Throw New Exception(ex.Message)

    End Try

End Function

但是我得到的输出是完全缩进的:

代码语言:javascript
复制
<!--MasterMusik Video Database-->
<Videos>
  <Video>
    <Name>4 Strings - Let It Rain</Name>
    <Genre>Dance</Genre>
    <Format>mp4</Format>
    <HD>HD</HD>
    <Resolution>1920x1080</Resolution>
    <Size>129,3</Size>
  </Video>
  <Video>
    <Name>Deadmau5 - I Remember (Live At Roskilde Festival)</Name>
    <Genre>Trance</Genre>
    <Format>mkv</Format>
    <HD>SD</HD>
    <Resolution>704x384</Resolution>
    <Size>97,99</Size>
  </Video>
  <Video>
    <Name>SKRILLEX &amp; WOLFGANG GARTNER - THE DEVIL's DEN</Name>
    <Genre>Techno</Genre>
    <Format>mp4</Format>
    <HD>HD</HD>
    <Resolution>1280x720</Resolution>
    <Size>70,57</Size>
  </Video>
</Videos>

这是我正在使用的用法:

代码语言:javascript
复制
Dim xdoc As XDocument = _
    XDocument.Load("Videos.xml", LoadOptions.PreserveWhitespace)

xdoc = XML_Sort(xdoc, "Video", "Name")

IO.File.WriteAllText("Sorted Videox.xml", xdoc.ToString)

在这一点上有两个问题:

  1. 输出是缩进的。
  2. XML的声明不是写的<?xml version="1.0" encoding="Windows-1252"?>,我需要手动编写它。

我怎样才能解决这两个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-29 15:23:21

一旦开始操作XDocument,格式就会丢失。排序方法只返回一个纯XML元素的列表。因此,您有两个选择:

  1. 用文本比较对文件进行排序。这不应该太难,因为<Name>是行中的第一个标记,所以只按字母顺序排序文本行就足够了: Dim line = File.ReadAllLines("Videos.xml") Dim toSort = lines.Skip(3).Take(lines.Length - 4)‘跳过前三行和最后一行’Dim结果=Videos.xml s).Concat({lines.Last}) File.WriteAllLines("Sorted.xml",result.ToArray())
  2. 或者,使用XDocument进行排序(或其他任何您想做的事情),但是使用自己的输出例程: 为video.ToString(SaveOptions.DisableFormatting)) Next sb.AppendLine("") File.WriteAllText("Sorted.xml",sb.ToString(),Encoding.GetEncoding(1252))中的每一段视频将sb定义为新的sb.AppendLine() sb.AppendLine("")
票数 2
EN

Stack Overflow用户

发布于 2013-10-27 09:47:32

尝尝这个

代码语言:javascript
复制
IO.File.WriteAllText("Sorted Videox.xml", xdoc.ToString(SaveOptions.DisableFormatting))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19616639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档