Как выбрать XML-узел на основе его содержимого?
Вопрос
Как я могу использовать XPath для выбора XML-узла на основе его содержимого?
Если я, например.есть следующий XML-код, и я хочу выбрать узел <author>, содержащий Ричи, чтобы получить полное имя автора:
<books>
<book isbn='0131103628'>
<title>The C Programming Language</title>
<authors>
<author>Ritchie, Dennis M.</author>
<author>Kernighan, Brian W.</author>
</authors>
</book>
<book isbn='1590593898'>
<title>Joel on Software</title>
<authors>
<author>Spolsky, Joel</author>
</authors>
</book>
</books>
Решение
/books/book/authors/author[contains(., 'Ritchie')]
или
//author[contains(., 'Ritchie')]
Другие советы
XPath для этого:
/books/book/authors/author[contains(., 'Ritchie')]
В C# следующий код вернет «Ричи, Деннис М.»:
xmlDoc.SelectSingleNode("/books/book/authors/author[contains(., 'Ritchie')]").InnerText;
//author[contains(text(), 'Ritchie')]
Не связан с StackOverflow