Получение атрибута с использованием XPath

Для такой структуры XML:

<?xml version="1.0" encoding="ISO-8859-1"?>

<bookstore>

<book>
  <title lang="eng">Harry Potter</title>
  <price>29.99</price>
</book>

<book>
  <title lang="eng">Learning XML</title>
  <price>39.95</price>
</book>

</bookstore>

Как я могу получить значение lang (где lang есть eng в заголовке книги), для первого элемента?

Ответ 1

Как я могу получить значение lang (где lang = eng в названии книги), для первый элемент?

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

/*/book[1]/title/@lang

Это означает:

Выберите атрибут lang элемента заголовка, который является потомком первого дочернего элемента book верхнего элемента документа XML.

Чтобы получить только строковое значение этого атрибута, используйте:

string(/*/book[1]/title/@lang)

Ответ 2

Спасибо! Это позволило решить аналогичную проблему с атрибутом данных внутри Div.

<div id="prop_sample" data-want="data I want">data I do not want</div>

Используйте этот xpath: //*[@id="prop_sample"]/@data-want

Надеюсь, это поможет кому-то еще!

Ответ 3

Вы можете попробовать под шаблоном xPath,

  XPathExpression expr = xPath.compile("/bookstore/book/title[@lang='eng']")

Ответ 4

Вы также можете получить его

string(//bookstore/book[1]/title/@lang)    
string(//bookstore/book[2]/title/@lang)

хотя, если вы используете XMLDOM с JavaScript, вы можете закодировать что-то вроде

var n1 = uXmlDoc.selectSingleNode("//bookstore/book[1]/title/@lang");

и n1.text даст вам значение "eng"

Ответ 5

Вот фрагмент получения значения атрибута "lang" с XPath и VTD-XML.

import com.ximpleware.*;
public class getAttrVal {
    public static void main(String s[]) throws VTDException{
        VTDGen vg = new VTDGen();
        if (!vg.parseFile("input.xml", false)){
            return ;
        }
        VTDNav vn = vg.getNav();
        AutoPilot ap = new AutoPilot(vn);
        ap.selectXPath("/bookstore/book/title/@lang");
        System.out.println(" lang value is ===>"+ap.evalXPathToString());
    }
}