【问题标题】:Java XML XPath Full XMLJava XML XPath 完整 XML
【发布时间】:2017-05-14 11:57:10
【问题描述】:

有点问题。我有以下代码:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document doc = builder.parse("result1.xml");
        XPathFactory xPathfactory = XPathFactory.newInstance();
        XPath xpath = xPathfactory.newXPath();
        XPathExpression expr = xpath.compile("//element");
        String elements = (String) expr.evaluate(doc, XPathConstants.STRING);

我得到了什么:

        jcruz0@exblog.jp
        Cheryl
        Blake
        195115

我想要什么:

<person> 
  <email>jcruz0@exblog.jp</email>
  <firstname>Cheryl</firstname>
  <lastname>Blake</lastname>
  <number>195115</number> 
</person>

如您所见,我想要完整的 XML 树。不仅仅是 NodeValue。 也许有人知道诀窍。 感谢您的帮助。

【问题讨论】:

    标签: java node.js xml xpath


    【解决方案1】:

    您获得了所选 XML 元素的字符串值,因为您将 XPathConstants.STRING 指定为 XPathExpression.evaluate()

    如果您确定您的 XPath 将选择单个元素,请指定返回类型 XPathConstants.NODE

        String elements = (String) expr.evaluate(doc, XPathConstants.NODE);
    

    XPathConstants.NODESET 用于多个元素,然后您可以根据需要对其进行迭代处理。

    【讨论】:

      【解决方案2】:

      这样的事情是可以做到的。

      XPathExpression expr = xpath.compile("/person");
      NodeList elements = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
      
      for (int i = 0; i < elements.getLength(); i++) {
          // the person node
          System.out.println(elements.item(i).getNodeName());
      
          for (int x = 0; x < elements.item(i).getChildNodes().getLength(); x++) {
              // the elements under person
              if (elements.item(i).getChildNodes().item(x).getNodeType() == Node.ELEMENT_NODE) {
                  System.out.println("\t" + elements.item(i).getChildNodes().item(x).getNodeName() + " - " + elements.item(i).getChildNodes().item(x).getTextContent());
              }
          }
      }
      

      输出

      person
          email - jcruz0@exblog.jp
          firstname - Cheryl
          lastname - Blake
          number - 195115
      

      您可以使用这些节点来做您想做的事,或者如果您只想打印它们,也可以将它们包装在 &lt;&gt; 中。

      【讨论】:

        猜你喜欢
        • 2015-11-22
        • 2014-07-25
        • 2014-05-10
        • 1970-01-01
        • 2023-03-15
        • 1970-01-01
        • 2017-02-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多