Форматированный вывод XML для консоли / отладки с произвольной длиной отступа - PullRequest
1 голос
/ 02 апреля 2020

Я ищу способ записи отформатированного XML в окно вывода консоли или отладки с настраиваемой длиной отступа. Значение по умолчанию XML Отступ документа выглядит как 2 пробела. I sh, чтобы изменить отступ от двух пробелов (" ") до четырех (" ").

От:

<urlset>
  <url>
    <loc>/js/lazyload.js</loc>
  </url>
</urlset>

До:

<urlset>
    <url>
      <loc>/js/lazyload.js</loc>
    </url>
</urlset>

I Я использую: XmlDocument и OuterXml, чтобы получить содержимое документа XML в строку. Затем я анализирую строку и печатаю ее в окне вывода, используя: Debug.WriteLine(XElement.Parse(XMLDoc.OuterXml).ToString()).

Мой код:

' 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 . Я ищу метод, который позволяет мне предоставить только строку, которая затем будет автоматически отформатирована и выведена в журнал вывода.

1 Ответ

1 голос
/ 02 апреля 2020

Вы можете использовать класс System. Xml .XmlWriter , он позволяет выводить содержимое XmlDocument в объект StringBuilder, который можно указать в XmlWriter.Create () метод.

Класс XmlWriterSettings позволяет указать, используется ли отступ, какой символ генерирует отступ и ширина отступа (сколько символов будет составлять отступ).

После того, как вы создали XmlDocument, добавьте:
(ChrW(32) - это пробел. Вы можете использовать любой другой. Например, точка: "."c)

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())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...