首页 文章

使用XPath获取属性

提问于
浏览
290

给定像这样的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 )的值?

7 回答

  • 0

    你也可以得到它

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

    虽然如果你使用XMLDOM与JavaScript,你可以编写类似的东西

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

    n1.text 将为您提供值 "eng"

  • 32

    如果您正在使用PostgreSQL,这是获得它的正确方法 . 这只是一个假设,因为您有一个带有填充数据的 bookTITLEPRICE 列 . 这是查询

    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”的所有属性节点并获取第一个 .

  • 399

    对于第一个元素,我怎样才能获得lang(其中lang = eng in book title)的值?

    Use

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

    This means

    选择title元素的 lang 属性,该属性是XML文档顶部元素的第一个 book 子元素的子元素 .

    To get just the string value of this attribute use the standard XPath function string()

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

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

    谢谢!这解决了我在Div中使用数据属性时遇到的类似问题 .

    <div id="prop_sample" data-want="data I want">data I do not want</div>
    

    使用此xpath: //*[@id="prop_sample"]/@data-want

    希望这有助于其他人!

  • 0

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

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

相关问题