Как использовать значение одного узла в качестве самого узла - PullRequest
0 голосов
/ 21 марта 2011
<root>
     <node1>value1</node1>
     <node2>something</node2>
     <something>somevalue</something>
<root>

Как сформировать XPath, который будет извлекать значение 'somevalue' в приведенном выше примере XML?Тег something сам по себе является значением <node2>

В будущем <node2> может иметь какое-то другое значение, скажем anything, что в конечном итоге приведет к anything в качестве тега, как показано ниже

<node2>anything</node2>
<anything>somevalue</anything>

что-то / что-нибудь теги будут там в зависимости от значения <node2>

Как сформировать XPath для вышеуказанного случая?

Ответы [ 3 ]

0 голосов
/ 21 марта 2011

Должен работать следующий xpath:

/root/*[name()=/root/node2]

Возвращает узел с тем же именем, что и значение /root/node2.

.
0 голосов
/ 21 марта 2011

Из комментариев ОП становится ясно, что документ XML является более сложным:

Использование :

  /*/*[name() = /*/node2]/tag1

Или использование:

  string(/*/*[name() = /*/node2]/tag1)

Или используйте:

  /*/*[name() = /*/node2]/text()[1]

Или используйте:

  string(/*/*[name() = /*/node2]/text()[1])
0 голосов
/ 21 марта 2011

Этот код содержит несколько способов сделать это.Последний использует один оператор xpath:

public void DoXML()
{
    System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
    doc.LoadXml("<root><node1>value1</node1><node2>something</node2><something>somevalue</something></root>");

    //Option 1 - two statements
    string nodeName = doc.DocumentElement.SelectSingleNode("node2").InnerText;
    string value1 = doc.DocumentElement.SelectSingleNode(nodeName).InnerText;
    Console.WriteLine(value1);

    //Option 2 - single statement
    string value2 = doc.DocumentElement.SelectSingleNode("node()[name() = ../node2]").InnerText;
    Console.WriteLine(value2);

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...