выделять элементы с именем атрибута name в специальной структуре xml - PullRequest
1 голос
/ 17 января 2012

ниже структура моего XML-документа.Я просто хочу сначала взять значение каждого узла <attribute name="a">, а затем сравнить его с заданным значением.Однако я не знаю, как найти <attribute name="a"> каждого узла, используя xml selectnodes в c #.Поиски в Google не показывают никаких рабочих решений.

<nodes>     
 <node name = "node1">      
  <attribute name="a">This is node1 a</attribute>
  <attribute name="b">This is node1 b</attribute>
 </node>
 <node name = "node2">      
  <attribute name="a">This is node2 a</attribute>
  <attribute name="b">This is node2 b</attribute>
 </node>
 ...
</nodes>     

Ответы [ 4 ]

3 голосов
/ 17 января 2012

Используйте Linq to XML:

XElement xml = XElement.Load("test.xml");
var myNodes = xml.Descendants("attribute")
                 .Where(x => x.Attribute("name").Value == "a");

Чтобы получить значения вместо узлов:

var myValues = xml.Descendants("attribute")
                  .Where(x => x.Attribute("name").Value == "a")
                  .Select(x => x.Value);
2 голосов
/ 17 января 2012

Вы можете использовать Linq to XML, что-то вроде следующего:

string xml = "<nodes>...";

var results = from node in XDocument.Parse(xml).Descendants()
          where node.Name == "attribute"
          select node.Value;

Затем вы можете просмотреть результаты по мере необходимости.

Здесь есть хороший Обзор Linq to XML .

2 голосов
/ 17 января 2012

Предполагая, что разметка XML в вашем вопросе представляет весь документ, вы можете сделать:

XmlNodeList attrElements
    = yourDocument.SelectNodes("/nodes/node/attribute[@name='a']");
1 голос
/ 17 января 2012

Мне нравится использовать класс System.Xml.XmlDocument для моего анализа XML.

XmlDocument doc = new XmlDocument();
doc.load("myfilename.xml");
XmlNode node = doc.SelectSingleNode("\\attribute[name='a']")

Вы должны взглянуть на некоторые ссылки на XPath, чтобы убедиться, что вы правильно получили строку xpath http://msdn.microsoft.com/en-us/library/ms256086.aspx

...