Java xpath 将整个元素作为字符串返回

标签 java xml xpath

我需要使用 java xpath 通过 id 将 xml 元素作为字符串返回。

给出...

<svg>
    <g id="Background">
    </g>
    <g id="Outline">
        <polygon fill="none" stroke="#000000" stroke-linecap="round" stroke-linejoin="round"     stroke-miterlimit="10" points=" 119.813,57.875 119.188,57.87" />
    </g>
    <g id="Base_Colour" transform="matrix(0.25 0 0 0.25 0 0)">
        <path fill="#ADB1AF" d="M112.25,208l-8,20.25l-0.5-1.75l0.75-0.5v-1.5l0.75-0.5v-1.5L106,222v-1.5l0.75-0.5v-1.5l0.75-0.5v-1.5"/>
        <path fill="#625595" d="M112.25,208l5.25-14.5l30-30.25l2.25-1.5l41.5-20.5l49.75-9.5h4.25l49,3l48.75"/>
    </g>
</svg>

返回的值需要是...

<g id="Outline">
    <polygon fill="none" stroke="#000000" stroke-linecap="round" stroke-linejoin="round"     stroke-miterlimit="10" points=" 119.813,57.875 119.188,57.87" />
</g> 

我用谷歌进行了大量搜索,但我尝试过的任何方法都无法返回整个元素。需要 Xpath,因为我想通过 id 查询任何级别的 g 标签。

最佳答案

我找到的解决方案是使用 xpath 获取 org.w3c.dom.Node(DOM 也可以)。然后我从节点创建了一个 javax.xml.transform.dom.DOMSource 并使用 javax.xml.transform.TransformerFactory 将其转换为字符串。

Node node = // the node you want to serialize
xmlOutput = new StreamResult(new StringWriter());
transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
transformer.transform(new DOMSource(node), xmlOutput);
String nodeAsAString = xmlOutput.getWriter().toString();

这很容易分解为一个类以供重用。不幸的是,Java 中没有 .NET 中的 .OuterXml 属性。所有 .NETer 现在都可以傻笑了。

关于Java xpath 将整个元素作为字符串返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13944197/

相关文章:

java - 如何检查 ANTLR 3 中的数字范围?

Java Socket 在不同机器上不起作用

Java:带有字节数组的输入流

xml - 具有属性和文本的简单内容的 XSD

android - 将聊天气泡对准RecyclerView的左侧

python - 如何单击 <svg :image> element using Selenium and Python

java 获取 XML 元素中所有属性的列表或名称

Java FXML Tableview 与 ArrayList

javascript - 剥离表格内容

xml - 我如何使用 xpath 表达式从以下数据中找出 productID 的最小值和最大值