Java XPath API – 获取表示子树的字符串

我的问题不是关于xpath语法,而是与围绕xpath的java API有关。 考虑以下xml:

  somevalue othervalue      stuff      

我可以使用以下代码轻松地使用xpath获取元数据字段:

  XPath xp = XPathFactory.newInstance().newXPath(); Node node = (Node) xp.evaluate("/wrapper/metadata/somefield", xmlDoc, XPathConstants.NODE); String somefield = node.getFirstChild().getNodeValue(); 

我正在努力学习如何从标签开始获取表示xml 子树的字符串。 换句话说,我编写什么代码来获取一个字符串,打印出来时会打印出以下内容? xpath查询将是“/ wrapper / data / some”,但我不知道如何正确使用xpath api。

    stuff    

您只需要使用Transformer将从XPathExpression返回的Node TransformerString就像将文档写入文件一样,这是一个完整的示例:

 public static void main(String[] args) throws Exception { final String xml = "\n" + " \n" + " somevalue\n" + " othervalue\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " stuff\n" + " \n" + " \n" + " \n" + " \n" + ""; final Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new ByteArrayInputStream(xml.getBytes(Charsets.UTF_8))); final XPathExpression xpath = XPathFactory.newInstance().newXPath().compile("//some"); final Node node = (Node) xpath.evaluate(doc, XPathConstants.NODE); StringWriter sw = new StringWriter(); TransformerFactory tf = TransformerFactory.newInstance(); Transformer transformer = tf.newTransformer(); transformer.setOutputProperty(OutputKeys.METHOD, "xml"); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); transformer.transform(new DOMSource(node), new StreamResult(sw)); System.out.println(sw.toString()); }