给出如此的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
)的值?
答案 0 :(得分:422)
我怎样才能获得lang的值(其中lang = eng in book title)for 第一个元素?
使用强>:
/*/book[1]/title/@lang
这意味着:
选择title元素的lang
属性,该属性是XML文档顶部元素的第一个book
子元素的子元素。
要获取此属性的字符串值,请使用标准XPath函数string()
:
string(/*/book[1]/title/@lang)
答案 1 :(得分:36)
谢谢!这解决了我在Div中使用数据属性时遇到的类似问题。
<div id="prop_sample" data-want="data I want">data I do not want</div>
使用此xpath://*[@id="prop_sample"]/@data-want
希望这有助于其他人!
答案 2 :(得分:3)
您可以尝试以下xPath模式,
XPathExpression expr = xPath.compile("/bookstore/book/title[@lang='eng']")
答案 3 :(得分:1)
你也可以通过
获得它string(//bookstore/book[1]/title/@lang)
string(//bookstore/book[2]/title/@lang)
虽然如果您使用带有JavaScript的XMLDOM,您可以编写类似
的代码var n1 = uXmlDoc.selectSingleNode("//bookstore/book[1]/title/@lang");
和n1.text
会为您提供值"eng"
答案 4 :(得分:0)
以下是使用XPath和VTD-XML获取“lang”属性值的片段。
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's value is ===>"+ap.evalXPathToString());
}
}
答案 5 :(得分:0)
您可以使用:
(//@lang)[1]
这意味着您将获得名称等于“ lang”的所有属性节点,并获得第一个。
答案 6 :(得分:0)
如果使用的是PostgreSQL,这是获取它的正确方法。这只是一个假设,因为您有一个带有已填充数据的 book 表 TITLE 和 PRICE 列。这是查询
SELECT xpath('/bookstore/book/title/@lang', xmlforest(book.title AS title, book.price AS price), ARRAY[ARRAY[]::TEXT[]]) FROM book LIMIT 1;
答案 7 :(得分:0)
使用XPath提取属性值的标准公式为
elementXPath/@attributeName
这是获取第一个属性的lang值的xpath-
//title[text()='Harry Potter']/@lang
PS:从不建议在XPath中使用索引,因为如果再添加一个标题标签,它们可能会更改。