2012-02-09 2 views
2

У меня возникли проблемы с отступом моих XML-файлов. Каждый раз, когда я загружаю их с определенного сервера, все узлы XML перемещаются по нескольким строкам. Я хочу написать быстрое приложение для правильного ввода узлов. То есть:Чтение файла XML и отступов

<name>Bob<name> 
<age>24</age> 
<address> 
    <stnum>2</stnum> 
    <street>herp derp st</street> 
</address> 

в настоящее время он выходит как:

<name>bob</name><age>24</age> 
<address> 
     <stnum>2</stnum><street>herp derp st</street> 
</address> 

, так как я не могу коснуться внутренней программы, которая дает мне эти XML-файлы и повторно отступы без программы будет принимать возрасты, Я хотел написать краткую программу, чтобы сделать это для меня. Когда я использую материал библиотеки XMLdocument, он только считывает информацию о узлах. Поэтому мой вопрос заключается в том, что хороший способ прочитать файл, по очереди, а затем повторять его для меня. Все узлы xml одинаковы.

Спасибо.

+0

ли не написать код для чтения XML-файла. Вместо этого используйте одну из встроенных библиотек .NET XML. –

+0

Почему это имеет значение? XML не чувствителен к пробелу, и если вы откроете его в визуализаторе XML, он обработает форматирование для вас. –

+1

просто из любопытства: почему вы беспокоитесь об отступе xml? – BrokenGlass

ответ

5

Вы можете использовать класс XmlTextWritter. Более конкретно .Formatting = Formatting.Indented.

Вот несколько примеров кода, которые я нашел в этом сообщении в блоге. http://www.yetanotherchris.me/home/2009/9/9/formatting-xml-in-c.html

public static string FormatXml(string inputXml) 
{ 
    XmlDocument document = new XmlDocument(); 
    document.Load(new StringReader(inputXml)); 

    StringBuilder builder = new StringBuilder(); 
    using (XmlTextWriter writer = new XmlTextWriter(new StringWriter(builder))) 
    { 
     writer.Formatting = Formatting.Indented; 
     document.Save(writer); 
    } 

    return builder.ToString(); 
} 
0

Если вы используете Visual Studio только Open XML сделать Ctrl + а Ctrl + K Ctrl + F, и это его для форматирования.

3

С помощью LINQ к XML, это в основном один лайнер:

public static string Reformat(string xml) 
{ 
    return XDocument.Parse(xml).ToString(); 
} 
0

Вы также можете использовать XSLT:

// This XSLT copies everything but idented 

    StringReader sr = new StringReader(xsl); 
    XmlReader reader = XmlReader.Create(sr); 
    XslTransform xslt = new XslTransform(); 
    xslt.Load(reader); 
    xslt.Transform(xmlFileUnidentedPath, xmlFileIdentedPath); 

После XSL определяется как:

string xsl = @" 
<?xml version=""1.0""?> 
<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform""> 
<xsl:output method=""xml"" omit-xml-declaration=""no"" indent=""yes"" encoding=""US-SCII""/> 
<xsl:strip-space elements=""*""/> 
<xsl:template match=""/""> 
    <xsl:copy-of select="".""/> 
</xsl:template> 
</xsl:stylesheet>"; 
Смежные вопросы