Существует ли быстрый способ отформатировать XmlDocument для дисплея в C#?

Ваш паттерн (_.+)?\.xml$ захватывает необязательную группу от первого подчеркивания до тех пор, пока он не может соответствовать .xml в конце строки, и он не учитывает количество подчеркиваний, которое должно быть между ними.

Чтобы соответствовать только последней части, вы можете опустить группу захвата. Вы можете использовать отрицательный класс символов и использовать якорь $, чтобы утверждать конец строки так, как она является последней частью:

[^_]+_[^_]+\.xml$

Regex demo | Демонстрация Python

Это будет соответствовать

  • [^_]+ Соответствие 1+ раз не _
  • _ Соответствие буквально
  • [ 1113] [^_]+ Соответствовать 1+ раз, а не _
  • \.xml$ Соответствовать .xml в конце строки

Например:

import re

test1 = 'AB_x-y-z_XX1234567890_84481.xml'
result = re.search('[^_]+_[^_]+\.xml, test1, re.I)
if result:
    print(result.group())

5
задан 21 April 2009 в 08:41
поделиться

6 ответов

Вот небольшой класс, который я собрал некоторое время назад, чтобы сделать именно это.

Предполагается, что вы работа с XML в строковом формате.

public static class FormatXML
{
    public static string FormatXMLString(string sUnformattedXML)
    {
        XmlDocument xd = new XmlDocument();
        xd.LoadXml(sUnformattedXML);
        StringBuilder sb = new StringBuilder();
        StringWriter sw = new StringWriter(sb);
        XmlTextWriter xtw = null;
        try
        {
            xtw = new XmlTextWriter(sw);
            xtw.Formatting = Formatting.Indented;
            xd.WriteTo(xtw);
        }
        finally
        {
            if(xtw!=null)
                xtw.Close();
        }
        return sb.ToString();
    }
}
18
ответ дан 18 December 2019 в 08:31
поделиться

Вы должны быть в состоянии сделать это с помощью средств форматирования кода. Сначала вам нужно будет html-кодирование xml на страницу.

У Google есть хороший преттификатор , способный визуализировать XML, а также несколько языков программирования.

По сути, поместите ваш XML в Предварительный тег, подобный этому:

<pre class="prettyprint"> 
    &lt;link href="prettify.css" type="text/css" rel="stylesheet" /&gt;
    &lt;script type="text/javascript" src="prettify.js">&lt;/script&gt;
</pre>
1
ответ дан 18 December 2019 в 08:31
поделиться

Используйте элемент управления XML-веб-сервера для отображения содержимого XML-документа на веб-странице .

РЕДАКТИРОВАТЬ: Вы должны передать весь XmlDocument в свойство Document элемента управления веб-сервера XML для его отображения. Вам не нужно использовать свойство InnerXml.

0
ответ дан 18 December 2019 в 08:31
поделиться

If identation is your only cocern and if you can afford to launch xternall process, you can process xml file with HTML Tidy console tool (~100K).

The code is:

tidy --input-xml y --output-xhtml y --indent "1" $(FilePath)

Then you can display idented string on web page once you get rid of special chars.

It would be also easy to create recursive function that makes such output - simply iterate nodes starting from the root and enter next recursion step for child node, passing identation as a parameter to each new recursion call.

0
ответ дан 18 December 2019 в 08:31
поделиться

Используйте XmlTextWriter с настройками XmlWriterSettings, чтобы включить отступ. Вы можете использовать StringWriter как «временное хранилище», если хотите записать полученную строку на экран.

0
ответ дан 18 December 2019 в 08:31
поделиться

Ознакомьтесь с бесплатным Actipro CodeHighlighter для ASP.NET - он может аккуратно отображать XML и другие форматы.

Или вас больше интересует фактическое форматирование XML? Затем взгляните на XmlTextWriter - вы можете указать такие вещи, как Format (отступ или нет) и уровень отступа, а затем записать свой XML, например, в MemoryStream и прочитать его оттуда в строку для отображения.

Marc

0
ответ дан 18 December 2019 в 08:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: