使用XPath获取属性

时间:2010-12-25 22:47:41

标签: xml 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(书名中langeng)的值?

8 个答案:

答案 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中使用索引,因为如果再添加一个标题标签,它们可能会更改。