2016-01-05 6 views
-1

У меня мало XML-документов. и каждый документ имеет разные узлы. Единственное, что обычно имеет место, это: узлы -Header и _Table. я хочу получить родительские узлы, которые содержат _Header и _Table узлы.Как получить узлы, которые содержат другие узлы xml в C#

enter image description here

Я хочу программу для вывода следующие узлы:

_StatementofNetAssets_T1 
_StatementofNetAssets_T2 
_StatementofNetAssets_T3 

Как я могу это сделать?

+0

Некоторые фактические XML, а не картина будет полезно - это похоже, что будут задействованы пространства имен, что означает, что два предоставленных ответа, вероятно, не сработают. –

+0

фактический XML был слишком запутанным, вот почему я не добавил его здесь –

ответ

1
XmlDocument xmlDoc=new XmlDocument(); 
string xmlname=Server.MapPath("*.xml").ToString(); 
xmlDoc.Load(xmlname); 
XmlNodeList nodeList=xmlDoc.SelectSingleNode("form/Documents").ChildNodes;//get all child nodes 
foreach(XmlNode xn in nodeList) 
{ 
    XmlElement xe2=(XmlElement)xn; 

    if(xe2.InnerText=="_Header"||xe2.InnerText=="_Table nodes") 
    { 
    XmlNode xn3=xn.ParentNode; 
    XmlElement xe=(XmlElement)xn3; 
    Console.WriteLine(xe.InnerText); 
    } 
} 
+0

Я сделал, как и спросил, но в строке 4 произошла ошибка. «Необработанное исключение типа« System.NullReferenceException »произошло в XmlToTable.exe Дополнительная информация: В экземпляре объекта не задана ссылка на объект." –

+0

@ShalinkaRandeniya вы должны изменить '' форму/Documents "' в коде 'XmlNodeList nodeList = xmlDoc.SelectSingleNode (" form/Documents "). ChildNodes' будет именем узла в вашем XML-файле. – gdreamlend

1

Вы можете использовать XDocument класс и XPath быстро разобрать документы

var elements = XDocument.Load(path).XPathSelectElements("//_Header").Select(q => q.Parent); 

Вы будете нуждаться в этих пространств имен

using System.Linq; 
using System.Xml.XPath; 
Смежные вопросы