Java 如何解决错误:一个节点在与创建它的文档不同的文档中使用。在爪哇

Java 如何解决错误:一个节点在与创建它的文档不同的文档中使用。在爪哇,java,xml,dom,Java,Xml,Dom,我有这样一个XML文件: <Interactions> <Interaction Delta="null" Kind="propagation" StructureKind="resource"/> <Interaction Delta="null" Kind="edit" StructureKind="resource"/> <Interaction Delta="null" Kind="select" Struct

我有这样一个XML文件:

<Interactions>
     <Interaction Delta="null" Kind="propagation"  StructureKind="resource"/>
     <Interaction Delta="null" Kind="edit"  StructureKind="resource"/>
     <Interaction Delta="null" Kind="select"  StructureKind="resource"/>
     <Interaction Delta="null" Kind="edit"  StructureKind="resource"/>
</Interactions>

我试图过滤那些具有“编辑”属性值的交互元素,并将它们写入新的XML文件中,如下所示:

<bug>
    <Interaction Delta="null" Kind="edit"  StructureKind="resource"/>
    <Interaction Delta="null" Kind="edit"  StructureKind="resource"/>
</bug>

这是我的代码:

public class xslt{
    public static  String dirPath = "/home/";

    public static void main(String[] args) {

    try{
        File fXmlFile= new File(dirPath+"file.xml");
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(fXmlFile);
        doc.getDocumentElement().normalize();
        NodeList nList = doc.getElementsByTagName("Interaction");

        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
        Document docnew = docBuilder.newDocument();
        Element rootElement = docnew.createElement("bugid");
        docnew.appendChild(rootElement);
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();

        StreamResult result = new StreamResult(new File(dirPath+"result2.xml"));
        for (int temp=0; temp<nList.getLength();temp++) {
            Node nNode = nList.item(temp);
            String value;
            value=nNode.getAttributes().getNamedItem("Kind").getNodeValue();

            if(value.equalsIgnoreCase("edit"))
                {
                Element eElement = (Element) nNode;

                rootElement.insertBefore(eElement,null);
                }

        }
        DOMSource source = new DOMSource(docnew);
        transformer.transform(source, result); 

        }

    catch(Exception e)
    {e.printStackTrace();}

    }

}
公共类xslt{
公共静态字符串dirPath=“/home/”;
公共静态void main(字符串[]args){
试一试{
File fXmlFile=新文件(dirPath+“File.xml”);
DocumentBuilderFactory dbFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder=dbFactory.newDocumentBuilder();
documentdoc=dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();
NodeList nList=doc.getElementsByTagName(“交互”);
DocumentBuilderFactory docFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder=docFactory.newDocumentBuilder();
Document docnew=docBuilder.newDocument();
Element rootElement=docnew.createElement(“bugid”);
docnew.appendChild(rootElement);
TransformerFactory TransformerFactory=TransformerFactory.newInstance();
Transformer Transformer=transformerFactory.newTransformer();
StreamResult=newstreamresult(新文件(dirPath+“result2.xml”);

对于(int temp=0;temp您无法从一个文档中获取节点并将其放入另一个文档中。您必须使用现有节点中的数据为目标文档创建新节点。

您应该首先将
nNode
导入
docnew

按如下方式修改您的代码:

if(value.equalsIgnoreCase("edit"))
{   
    Node imported_node = docnew.importNode(nNode, true);
    Element eElement = (Element) imported_node;
    rootElement.insertBefore(eElement,null);
}

干杯!

有这样做的例子吗?工作完美无瑕!也犯了同样的错误,没有附加导入的节点