Getting attribute using XPath
给定这样的XML结构:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?xml version="1.0" encoding="ISO-8859-1"?> <bookstore> <book> <title lang="eng">Harry Potter <price>29.99</price> </book> <book> <title lang="eng">Learning XML <price>39.95</price> </book> </bookstore> |
我怎样才能得到第一个元素的
How could I get the value of lang (where lang=eng in book title), for
the first element?
用途:
1 | /*/book[1]/title/@lang |
这意味着:
选择标题元素的
要仅获取此属性的字符串值,请使用标准的xpath函数
1 | string(/*/book[1]/title/@lang) |
谢谢!这解决了我在DIV中使用数据属性时遇到的类似问题。
1 | data I do not want |
使用此xpath:
希望这能帮助别人!
您可以尝试使用下面的xpath模式,
1 | XPathExpression expr = xPath.compile("/bookstore/book/title[@lang='eng']") |
你也可以通过
1 2 | string(//bookstore/book[1]/title/@lang) string(//bookstore/book[2]/title/@lang) |
不过,如果将xmldom与javascript结合使用,则可以编写类似的代码
1 | var n1 = uXmlDoc.selectSingleNode("//bookstore/book[1]/title/@lang"); |
而
如果您使用的是PostgreSQL,这是获得它的正确方法。这只是一个假设,因为您有一个带有填充数据的图书表标题和价格列。这是问题
1 | SELECT xpath('/bookstore/book/title/@lang', xmlforest(book.title AS title, book.price AS price), ARRAY[ARRAY[]::TEXT[]]) FROM book LIMIT 1; |
你可以使用:
1 | (//@lang)[1] |
这意味着您将获得所有名称等于"lang"的属性节点,并获得第一个属性节点。
下面是使用xpath和vtd-xml获取"lang"属性值的片段。
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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()); } } |