Если я получу путь к определенному узлу в виде строки, могу ли я как-то легко найти указанный узел, используя 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;
отмечают, что моя строка исходит из другого места, поэтому я предполагаю, что она не должна быть буквальной (по крайней мере, в режиме отладки это похоже на приведенный выше). Я также попытался добавить / впереди. Это дает мне нулевую ссылку.
Попробуйте использовать метод расширения XPathSelectElement
для XElement
. Вы можете передать методу выражение XPath для оценки. Например:
XElement myElement = rootElement.XPathSelectElement("//Book[@ISBN='22542']");
Edit :
В ответ на ваше изменение проверьте выражение XPath. Если ваш документ содержит только этот небольшой фрагмент, то / Product / Name
будет работать, поскольку ведущая косая черта выполняет поиск из корня документа:
XElement element = document.XPathSelectElement("/Product/Name");
Если есть другие продукты и
не является корневым узлом, который вам понадобится для изменения используемого XPath.
Вы также можете использовать 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>
Это должно распечатать содержимое из узла элементов.