给定一个这样的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在书名),为第一个元素?


当前回答

你也可以通过

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

如果你使用XMLDOM和JavaScript,你可以编写类似的代码

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

和n1。文本会给出值"eng"

其他回答

你可以使用:

(//@lang)[1]

这意味着您将获得name等于“lang”的所有属性节点,并获得第一个。

你也可以通过

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

如果你使用XMLDOM和JavaScript,你可以编写类似的代码

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

和n1。文本会给出值"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());
    }
}

使用XPath提取属性值的标准公式是

elementXPath/@attributeName

这里是获取第一个属性-的lang值的xpath

//title[text()='Harry Potter']/@lang

PS:不建议在XPath中使用索引,因为如果再加入一个标题标记,索引就会发生变化。

你可以试试下面的xPath模式,

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