Java 如何解决错误:一个节点在与创建它的文档不同的文档中使用。在爪哇
我有这样一个XML文件: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
<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);
}
干杯!有这样做的例子吗?工作完美无瑕!也犯了同样的错误,没有附加导入的节点