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
Transformer
为String
就像将文档写入文件一样,这是一个完整的示例:
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()); }