为什么xpath查询对于字母数字值失败?

时间:2014-04-28 16:32:48

标签: xml-parsing xpath-2.0

我有一个XML: -

   <?xml version="1.0" encoding="UTF-8" ?>
     <sample>
       <book year="2005">
          <title>Tower</title>
          <author>Niven</author>
          <author>Pournelle</author>
          <publisher>Pocket</publisher>
          <isbn>0743416910</isbn>
          <price>5.99</price>
       </book>
       <book year="2005ad">
          <title>Burning</title>
          <author>Larry</author>
          <publisher>ABC</publisher>
          <isbn>096543</isbn>
          <price>0.99</price>
        </book>
      </sample>

我正在使用XPath来获取使用年份的所有字段。

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    factory.setNamespaceAware(true); 
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document doc = builder.parse("sample.xml");

    XPathFactory xpathfactory = XPathFactory.newInstance();
    XPath xpath = xpathfactory.newXPath();

    XPathExpression expr = xpath.compile("//book[@year=2005]/*");


    // xpath.compile("//book[@year=2005ad]/*");
    Object result = expr.evaluate(doc, XPathConstants.NODESET);
    NodeList nodes = (NodeList) result;

    for (int i = 0; i < nodes.getLength(); i++) {

        Element el = (Element) nodes.item(i);
        System.out.println("tag: " + el.getNodeName());

        if (el.getFirstChild().getNodeType() == Node.TEXT_NODE)
            System.out.println("inner value:" + el.getFirstChild().getNodeValue());
    }

我用的时候            XPathExpression expr = xpath.compile(&#34; // book [@ year = 2005] / *&#34;); 我得到了正确的输出数据。

但是当我使用时         xpath.compile(&#34; //书[@年= 2005ad ] / *&#34); 我没有得到任何输出数据。

每当&#34;年&#34;的任何字母数字数据时使用,我没有得到任何数据。 我很困惑为什么会出现这个问题。

1 个答案:

答案 0 :(得分:0)

解决方法是这样做(带引号):

//book[@year="2005ad"]