Для такой структуры 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
в заголовке книги), для первого элемента?
Как я могу получить значение lang (где lang = eng в названии книги), для первый элемент?
Использование
/*/book[1]/title/@lang
Это означает:
Выберите атрибут lang
элемента заголовка, который является потомком первого дочернего элемента book
верхнего элемента документа XML.
Чтобы получить только строковое значение этого атрибута, используйте:
string(/*/book[1]/title/@lang)
[attribute_value]
. Есть ли способ получить значение атрибута без квадратных скобок?
lang
. Если атрибут не содержит квадратных скобок, они не будут частью результата вычисления выражения XPath. Я предполагаю, что они добавляются (неподходящим) инструментом, который вы используете.
Спасибо! Это позволило решить аналогичную проблему с атрибутом данных внутри Div.
<div id="prop_sample" data-want="data I want">data I do not want</div>
Используйте этот xpath: //*[@id="prop_sample"]/@data-want
Надеюсь, это поможет кому-то еще!
Вы можете попробовать под шаблоном xPath,
XPathExpression expr = xPath.compile("/bookstore/book/title[@lang='eng']")
Вы также можете получить его
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"
Вот фрагмент получения значения атрибута "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());
}
}