如何使用java / python从xml结构中获取匹配xpath的DOM结构

时间:2017-06-27 14:39:41

标签: java html xml python-3.x xpath

考虑到以下XML结构,我如何获取/打印与给定xpath匹配的相应DOM结构。

<foo>
    <foo1>Foo Test 1</foo1>
    <foo2>
        <another1>
            <test1>Foo Test 2</test1>
        </another1>
    </foo2>
    <foo3>Foo Test 3</foo3>
    <foo4>Foo Test 4</foo4>
</foo>

对于xpath /foo/foo2,输出应该类似于

    <another1>
        <test1>Foo Test 2</test1>
    </another1>

1 个答案:

答案 0 :(得分:1)

您无法使用xpath以xml的形式获取DOM结构。使用xpath和evaluate,您将获得DOM节点。你可以从NODESET构造你想要的xml,但是这会很麻烦,因为子节点的数量在感兴趣的元素下增加(这里只有一个子节点another1 - 它是好的)

但另外考虑使用如下的XSLT:

注意:我已经使用xslt作为字符串,如果您的要求只是显示another1那么简单就可以了,否则您需要创建一个新的.xsl文件并使用它创建{ {1}}喜欢:StreamSource

new StreamSource( new File("mystylesheet.xsl") )

它的工作方式是transfomer在您的xml上应用XSLT字符串(在上面的代码中用String xslt = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">" + "<xsl:output method=\"xml\" omit-xml-declaration=\"yes\"/>" + "<xsl:template match=\"/\">" + "<xsl:copy-of select=\"//foo/foo2/another1\"/>" + "</xsl:template>" + "</xsl:stylesheet>"; Transformer transformer = TransformerFactory.newInstance().newTransformer( new StreamSource(new StringReader(xslt)) ); StreamSource xmlSource = new StreamSource( new File( "anotherfoo.xml" ) ); StringWriter sw = new StringWriter(); transformer.transform(xmlSource, new StreamResult(sw) ); System.out.println(sw.toString()); 表示)并获取与xpath anotherfoo.xml//foo/foo2/another1匹配的元素。