使用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在书名中),第一个元素是什么?

我怎么能得到lang的价值(lang =在书名中),第一个元素是什么?

用途

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

这意味着

select作为XML文档顶部元素的第一个book子元素的子元素的title元素的lang属性。

为了得到这个属性的string值,使用

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

谢谢! 这解决了我在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) 

虽然如果你在JavaScript中使用XMLDOM,你可以编写类似的代码

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

n1.text将给你的价值"eng"

下面是使用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()); } }