如何在java中使用xpath获取xml的一部分

时间:2014-12-16 05:18:54

标签: java xml xpath

基于xpath我想选择xml的一部分和我想用作另一个xml源的选定部分。

e.g:

 <root>
    <a type="t1">
        <property name="data" value="val1"/>
    </a>
    <a type="t2">
        <property name="data" value="val2"/>
    </a>
   <a type="t1">
        <property name="data" value="val2"/>
    </a>
 </root>

xpath:/ root / a [@type =&#34; t1&#34;] /

并且选择的xml将是

<root>
    <a type="t1">
        <property name="data" value="val1"/>
    </a>
    <a type="t1">
        <property name="data" value="val2"/>
    </a>
 </root>

同样我想在java中使用另一个xml源代码。 请帮帮我。

2 个答案:

答案 0 :(得分:1)

加载XML并找到您要查找的节点......

DocumentBuilderFactory f = DocumentBuilderFactory.newInstance();
DocumentBuilder b = f.newDocumentBuilder();
Document d = b.parse(...);

// Find all nodes with the attribute of type equal to `t1`
// You could use //*/a[@type='t1'] if you wanted to narrow it down
// This find ALL matches through out the document...
String expression = "//*[@type='t1']";
XPath xPath = XPathFactory.newInstance().newXPath();
Object result = xPath.compile(expression).evaluate(d, XPathConstants.NODESET);

NodeList nodes = (NodeList) result;

创建新的Document ....

Document d2 = b.newDocument();
Element root = d2.createElement("root");
d2.appendChild(root);

将节点从第一个添加到第二个......

for (int i = 0; i < nodes.getLength(); i++) {
    Node node = nodes.item(i);
    d2.adoptNode(node);
    root.appendChild(node);
}

哪个应该导致......

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root>
    <a type="t1">
        <property name="data" value="val1"/>
    </a>
    <a type="t1">
        <property name="data" value="val2"/>
    </a>
</root>

答案 1 :(得分:0)

通过传递适当的xpath表达式

,可以使用以下函数将xml块提取为字符串
Point2D