Как мне найти узел XML по пути в Linq-to-XML

Если я получу путь к определенному узлу в виде строки, могу ли я как-то легко найти указанный узел, используя Linq / Method XElement (или XDocument).

Существует так много различных типов объектов XML, что это также было бы хорошо, если бы в качестве дополнительного бонуса вы могли бы указать мне руководство о том, почему / как использовать разные типы.

РЕДАКТИРОВАТЬ: Хорошо, после указания на XPathSelectElement я пробую это, чтобы я мог дать ему правильный ответ, который я могу не совсем заставить его работать, хотя. Это XML-код, который я пробую

<Product>
  <Name>SomeName</Name>
  <Type>SomeType</Type>
  <Quantity>Alot</Quantity>
</Product>

, и мой код

string path = "Product/Name";
string name = xml.XPathSelectElement(path).Value;

отмечают, что моя строка исходит из другого места, поэтому я предполагаю, что она не должна быть буквальной (по крайней мере, в режиме отладки это похоже на приведенный выше). Я также попытался добавить / впереди. Это дает мне нулевую ссылку.

7
задан Ingó Vals 11 August 2010 в 15:34
поделиться

2 ответа

Попробуйте использовать метод расширения XPathSelectElement для XElement . Вы можете передать методу выражение XPath для оценки. Например:

XElement myElement = rootElement.XPathSelectElement("//Book[@ISBN='22542']");

Edit :

В ответ на ваше изменение проверьте выражение XPath. Если ваш документ содержит только этот небольшой фрагмент, то / Product / Name будет работать, поскольку ведущая косая черта выполняет поиск из корня документа:

XElement element = document.XPathSelectElement("/Product/Name");

Если есть другие продукты и не является корневым узлом, который вам понадобится для изменения используемого XPath.

12
ответ дан 6 December 2019 в 09:57
поделиться

Вы также можете использовать XPathEvaluate

XDocument document = XDocument.Load("temp.xml");
var found = document.XPathEvaluate("/documents/items/item") as IEnumerable<object>;
foreach (var obj in found)
{
    Console.Out.WriteLine(obj);    
}

, учитывая следующий xml:

<?xml version="1.0" encoding="utf-8" ?>
<documents>
  <items>
    <item name="Jamie"></item>
    <item name="John"></item>
  </items>
</documents>

Это должно распечатать содержимое из узла элементов.

7
ответ дан 6 December 2019 в 09:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: