2009-09-07 3 views
1

в XML-файлепреобразования значения XML в строку (использование C#)

<dummy1> 
    <dummy2> 
    <dummy3> 
     <items> 
     <item id="1111" name="Real_item_Name" url="i=1111"> 
      <filter name="itemLevel" value="item_value"/> 
      <filter name="source" value="dummy4"/> 
     </item> 
     <item id="2222" name="Real_item_Name2" url="i=222"> 
      <filter name="itemLevel" value="item_value2"/> 
      <filter name="source" value="dummy5"/> 
     </item> 
       //roop 
     </items> 
    </dummy3> 
    </dummy2> 
</dummy1> 

как я могу сделать это значение в C# (вставить значение String)

Real_item_Name, 1111, item_value
Real_item_Name2, 2222, item_value2
Real_item_Name3, 3333, item_value3

пожалуйста, покажите мне дом или саксофон пример ...

+0

Вы имеете в виду держать этот xml как строку? –

+0

Нет, он означает превратить XML в эквивалент (csv). –

ответ

3
XDocument xml = XDocument.Load("foo.xml"); 
string csv = string.Join("\n", 
    xml.Descendants("item").Select(item => 
     string.Format("{0}, {1}, {2}", 
      (string)item.Attribute("name"), 
      (string)item.Attribute("id"), 
      (string)item.Elements("filter") 
         .Single(f => f.Attribute("name") == "itemLevel") 
         .Attribute("value"))) 
     .ToArray()); 
+0

Отлично! Я узнаю что-то новое. Я использую этот код, но ошибка в Single-XElement не содержит определения. Как это можно решить? – adatapost

+2

Учитывая использование LINQ, могу ли я предложить вам также использовать «var», где это возможно? –

+1

adatapost, вам нужно включить правильные пространства имен для LINQ to XML. –

4

Там есть десяток различных способов сделать это. Вот очень простой пример использования XSL:

mytransform.xsl:

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="/"> 
    <xsl:for-each select="items/item"> 
     <xsl:value-of select="@name" />, <xsl:value-of select="@id" />, <xsl:value-of select="filter/@value" /> 
    </xsl:for-each> 
</xsl:template> 

загружаем файл XSL в преобразование объекта; указать входной XML и текстовый файл вывод:

XslTransform xslt = new XslTransform(); 
xslt.Load("c:\\path\\mytransform.xsl"); 
xslt.Transform("c:\\path\\input.xml", "c:\\path\\output.txt"); 

Заканчивать документацию по XslTransform для более частого использования в глубине, как работать в потоках памяти и объектах XML вместо пути к файлу. Тем не менее это демонстрирует основные понятия.

+0

XslTransform устарел, используйте XslCompiledTransform. Синтаксис идентичен. –

+0

+1 XLST - это хороший старомодный способ превратить XML в текст. –

+0

Ty: Компиляция выполняется быстрее, но имеет высокую начальную стоимость. –

Смежные вопросы