首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >输出格式化XML到具有自定义缩进长度的控制台/调试

输出格式化XML到具有自定义缩进长度的控制台/调试
EN

Stack Overflow用户
提问于 2020-04-02 14:49:46
回答 1查看 331关注 0票数 1

我正在寻找一种将格式化XML写入控制台或调试输出窗口的方法,该窗口具有自定义的缩进长度。默认的XML文档缩进值似乎是两个空格。我希望将缩进从两个空格(" ")更改为四个(" ")

发自:

代码语言:javascript
复制
<urlset>
  <url>
    <loc>/js/lazyload.js</loc>
  </url>
</urlset>

至:

代码语言:javascript
复制
<urlset>
    <url>
      <loc>/js/lazyload.js</loc>
    </url>
</urlset>

我使用:XmlDocumentOuterXml将XML文档的内容转换为字符串。然后解析字符串并使用:Debug.WriteLine(XElement.Parse(XMLDoc.OuterXml).ToString())将其打印到输出窗口。

我的守则:

代码语言:javascript
复制
' Create XML Document
Dim XMLDoc As New XmlDocument
With XMLDoc

    ' Add Urlset
    Dim XMLSchema As XmlElement = .CreateElement("urlset")
    .AppendChild(XMLSchema)

    ' Add URLs
    For Each Script In ScriptsList
        Dim XMLUrl As XmlElement = .CreateElement("url")
        XMLSchema.AppendChild(XMLUrl)

        Dim XMLLoc As XmlElement = .CreateElement("loc")
        XMLLoc.InnerText = Script
        XMLUrl.AppendChild(XMLLoc)
    Next

    ' Write To Output Window
    Debug.WriteLine(XElement.Parse(XMLDoc.OuterXml).ToString())

End With

我有两个关于解析和缩进行的问题。

  1. 我目前正在使用XElement解析文档,这是LINQ库的一部分。还有另一种方法来解析使用标准XML库Imports System.Xml的文档吗?注意:我理解LINQ也是图书馆的一部分。(Imports System.Xml.Linq)
  2. 我读到可以使用XmlWriterSettings更改缩进和缩进字符。但是,我似乎必须手动输出每一行:链接到MSDN。我正在寻找一种方法,允许我只提供一个字符串,然后将自动格式化并输出到输出日志。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-02 17:40:15

您可以使用System.Xml.XmlWriter类,它允许将XmlDocument内容输出到StringBuilder对象,该对象可以在XmlWriter.Create()方法中指定。

XmlWriterSettings类允许指定是否使用缩进,哪个字符生成缩进和缩进的宽度(有多少字符将组成缩进)。

创建XmlDocument之后,添加:

(ChrW(32)是空间字符。你可以用任何其他的。例如,一个点:"."c)

代码语言:javascript
复制
Dim indentWidth As Integer = 4
Dim XMLDoc As New XmlDocument
With XMLDoc 
    (...)
End With

Dim sb As New StringBuilder()
Dim settings = New XmlWriterSettings() With {
        .Indent = True,
        .IndentChars = New String(ChrW(32), indentWidth),
        .CloseOutput = True
    }

Dim writer = XmlWriter.Create(sb, settings)
XMLDoc.WriteTo(writer)
writer.Dispose()
Console.WriteLine(sb.ToString())
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60994415

复制
相关文章

相似问题

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