Java xpath以字符串形式返回整个元素

jer*_*own 5 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>
Run Code Online (Sandbox Code Playgroud)

返回的值必须是......

<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> 
Run Code Online (Sandbox Code Playgroud)

我已经广泛搜索过,我尝试过的任何东西都无法返回整个元素.需要Xpath,因为我想通过id查询任何级别的g标签.

jer*_*own 9

我找到的解决方案是使用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();
Run Code Online (Sandbox Code Playgroud)

这很容易被考虑到一个类中以供重用.不幸的是,Java中没有.OuterXml属性,就像在.NET中一样.你所有的.NETer都可以傻笑.