2012-01-31 1 views
1

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

<books> 
    <book> 
     <id>1</id> 
     <firstCover> 
     <author name="**" age="**" /> 
     <title name="zz" font="yyy" size="uuu"/> 
     </firstCover> 
     <lastCover> 
     </lastCover> 
    </book> 
    <book> 
     <id>2</id> 
     <firstCover> 
     <author name="**" age="**" /> 
     <title name="zz" font="yyy" size="uuu"/> 
     </firstCover> 
     <lastCover> 
     </lastCover> 
    </book> 
</books> 

Теперь для того, чтобы получить содержимое XML для первой обложки книги с идентификатором = 1, я делаю это:

XmlNodeList b = root.SelectNodes("/books/book[contains(id,1)]/firstCover"); 

Тогда Я действительно должен был бы взять на себя все содержание того, что находится внутри firstCover для этой книги:

<author name="**" age="**" /> 
<title name="zz" font="yyy" size="uuu"/> 

и вставить его в XmlElement. Вот где я застрял. Я знаю, что могу сделать это с помощью цикла foreach в XmlNodeList, но есть ли более простой способ?

ответ

0

Я предполагаю, что вы хотите вставить его в XMLElement в другом XMLDocument.

Это вы что искали?

XmlDocument sourceDoc = new XmlDocument(); 
//This is loading the XML you present in your Question. 
sourceDoc.LoadXml(xmlcopier.Properties.Resources.data); 
XmlElement root = sourceDoc.DocumentElement; 


XmlElement b = (XmlElement)root.SelectSingleNode("/books/book[contains(id,1)]/firstCover"); 

XmlDocument destDoc = new XmlDocument(); 
XmlElement destRoot = destDoc.CreateElement("base"); 
destDoc.AppendChild(destRoot); 
XmlElement result = destDoc.CreateElement("firstCover"); 


result.InnerXml = b.InnerXml; 
destRoot.AppendChild(result); 


destDoc.Save("c:\\test.xml");