Найден узел с идентификатором - PullRequest
1 голос
/ 03 августа 2011

У меня есть поток XML с этой структурой:

<TagNames>
  <TagName id="A1">some text...</TagName>
  <TagName id="A2">some text...</TagName>
  <TagName id="An">some text...</TagName>
</TagNames>

Каков наилучший способ получить только один узел по 'id' без зацикливания всего файла? Linq to Sql, Xpath ... Я использую C #

Спасибо

Ответы [ 2 ]

2 голосов
/ 04 августа 2011

В XPath это немедленно:

"/TagNames/TagName[@id='A1']"

Вы можете использовать его с XMLDocument.SelectSingleNode из System.Xml :

  XmlDocument doc = new XmlDocument();
  doc.Load("input.xml");

  XmlNode single_node;
  XmlElement root = doc.DocumentElement;
  single_node = root.SelectSingleNode("/TagNames/TagName[@id='A1']");

  Console.WriteLine(single_node.OuterXml);
2 голосов
/ 03 августа 2011

Используя LinqToXml, вы можете:

var xml = @"<TagNames>   
  <TagName id=""A1"">some text...</TagName>  
  <TagName id=""A2"">some text...</TagName>   
  <TagName id=""An"">some text...</TagName> 
</TagNames>";

var document = XDocument.Parse(xml);

var node = 
document
.Root //The root node
.Elements("TagName") //all elements called TagName under the root.
.Where(element => element.Attribute("id").Value == "A1") //Node with an attribute called Id with the value "A1".
.Single(); //Only return 1 element.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...