2015-09-22 5 views
0

У меня есть файл XML, как показано ниже:Извлечение конкретных узлов из XML

<catalog> 
    <cd Id="2"> 
    <title>Title2</title> 
    <artist>artist2</artist> 
    <company> 
     <companyName>Company2</companyName> 
     <companyAddress1>street1</companyAddress1> 
     <companyAddress2>street2</companyAddress2> 
     <companyCity>City2</companyCity> 
    </company> 
    <price>12.90</price> 
    <year>1987</year> 
    </cd> 
    <cd Id="3"> 
    <title>Title3</title> 
    <artist>artist3</artist> 
    <company> 
     <companyName>Company3</companyName> 
     <companyAddress1>street1</companyAddress1> 
     <companyAddress2>street2</companyAddress2> 
     <companyCity>City3</companyCity> 
    </company> 
    <price>9.90</price> 
    <year>1984</year> 
    </cd> 
</catalog> 

Я хочу, чтобы фильтровать этот исходный XML на основе атрибута Id в узле и создать новый XML-файл что-то вроде:

<catalog> 
    <cd Id="2"> 
    <title>Title2</title> 
    <artist>artist2</artist> 
    <company> 
     <companyName>Company2</companyName> 
    </company> 
    <price>12.90</price> 
    </cd> 
    <cd Id="3"> 
    <title>Title3</title> 
    <artist>artist3</artist> 
    <company> 
     <companyName>Company3</companyName> 
    </company> 
    <price>9.90</price> 
    </cd> 
</catalog> 

Исходный файл слишком большой, поэтому я думаю, мне нужно пойти с XmlReader. Но я не могу найти простой способ фильтрации на основе Id и извлечения необходимых узлов. Любая помощь приветствуется.

Благодаря

+0

Я что-то вроде [XSLT] угадывание (https://en.wikipedia.org/wiki/XSLT) может быть ваш друг. Он специально разработан для преобразования XML в другие форматы (включая другие форматы XML). –

+0

[Покажите мне (ваш) код] (http://mattgemmell.com/what-have-you-tried/), чтобы мы могли помочь вам лучше, а не использовать наш код. –

ответ

2

Я думаю, что это именно то, что вы хотите:

XDocument xdoc = XDocument.Load("File path");//Load XML file 

//Delete all elements in company except companyName 
xdoc.Descendants("company").Elements().Where(x => x.Name != "companyName").Remove(); 

//Delete year 
xdoc.Descendants("year").Remove(); 

xdoc.Save("File path");//Overwrite the XML file with the new result 
Смежные вопросы