拆分xml节点

时间:2013-12-22 09:59:20

标签: java xml dom xpath

我有这个xml:

<Forms>
<Form ID="230688" TemplateID="1111" DocType="1">
    <Field name="topmostSubform[0].Page1[0].Street[0]" value="street" />
    <Field name="topmostSubform[0].Page1[0].HouseNo[0]" value="18" />
</Form>
<Form ID="230645" TemplateID="5444" DocType="8">
    <Field name="topmostSubform[0].Page1[0].city[0]" value="city_name" />
    <Field name="topmostSubform[0].Page1[0].number[0]" value="345354" />
</Form>
<Form ID="230690" TemplateID="1123" DocType="8">
    <Field name="topmostSubform[0].Page1[0].group[0]" value="group" />
    <Field name="topmostSubform[0].Page1[0].phone[0]" value="phone" />
</Form>

我想生成4个xml,其中每个xml由一个单独的表单节点组成。

这是产生的(每个Form节点一个):

<Forms>
<Form ID="230688" TemplateID="1111" DocType="1">
    <Field name="topmostSubform[0].Page1[0].Street[0]" value="street" />
    <Field name="topmostSubform[0].Page1[0].HouseNo[0]" value="18" />
</Form>
</Forms>

我试过了:

NodeList nodeList = (NodeList) xpath.evaluate("//Forms//Form", parser.doc,XPathConstants.NODESET);
for(int i=0; i<nodeList.getLength(); i++)
            {
                Document outputDoc = _docBuilder.newDocument();
                Element rootElement = outputDoc.createElement("Forms");
                Node childNode = nodeList.item(i);
                rootElement.appendChild(childNode);
                outputDoc.appendChild(rootElement); .....

但是这给出了一个例外:“WRONG_DOCUMENT_ERR:节点用在与创建它的文档不同的文档中。”

1 个答案:

答案 0 :(得分:0)

您想使用Document.importNode()

  

将其他文档中的节点导入此文档,而不从原始文档中更改或删除源节点;此方法创建源节点的新副本。返回的节点没有父节点; (parentNode为null)。