Ваш паттерн (_.+)?\.xml$
захватывает необязательную группу от первого подчеркивания до тех пор, пока он не может соответствовать .xml
в конце строки, и он не учитывает количество подчеркиваний, которое должно быть между ними.
Чтобы соответствовать только последней части, вы можете опустить группу захвата. Вы можете использовать отрицательный класс символов и использовать якорь $
, чтобы утверждать конец строки так, как она является последней частью:
[^_]+_[^_]+\.xml$
Regex demo | Демонстрация Python
Это будет соответствовать
[^_]+
Соответствие 1+ раз не _ _
Соответствие буквально [^_]+
Соответствовать 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())
Вот небольшой класс, который я собрал некоторое время назад, чтобы сделать именно это.
Предполагается, что вы работа с 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();
}
}
Вы должны быть в состоянии сделать это с помощью средств форматирования кода. Сначала вам нужно будет html-кодирование xml на страницу.
У Google есть хороший преттификатор , способный визуализировать XML, а также несколько языков программирования.
По сути, поместите ваш XML в Предварительный тег, подобный этому:
<pre class="prettyprint">
<link href="prettify.css" type="text/css" rel="stylesheet" />
<script type="text/javascript" src="prettify.js"></script>
</pre>
Используйте элемент управления XML-веб-сервера для отображения содержимого XML-документа на веб-странице .
РЕДАКТИРОВАТЬ: Вы должны передать весь XmlDocument в свойство Document элемента управления веб-сервера XML для его отображения. Вам не нужно использовать свойство InnerXml.
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.
Используйте XmlTextWriter с настройками XmlWriterSettings, чтобы включить отступ. Вы можете использовать StringWriter как «временное хранилище», если хотите записать полученную строку на экран.
Ознакомьтесь с бесплатным Actipro CodeHighlighter для ASP.NET - он может аккуратно отображать XML и другие форматы.
Или вас больше интересует фактическое форматирование XML? Затем взгляните на XmlTextWriter - вы можете указать такие вещи, как Format (отступ или нет) и уровень отступа, а затем записать свой XML, например, в MemoryStream и прочитать его оттуда в строку для отображения.
Marc