Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将子节点从XML文件拆分为它们自己的XML文件_Java_Xml_Dom_Parsing - Fatal编程技术网

Java 将子节点从XML文件拆分为它们自己的XML文件

Java 将子节点从XML文件拆分为它们自己的XML文件,java,xml,dom,parsing,Java,Xml,Dom,Parsing,我有一个XML文件(在左边),我想创建多个文件(在右边): 任何指向正确方向的帮助都将不胜感激 DOM中的节点有其所属文档的概念(因此您的错误的\u文档\u错误) 因此,您需要将节点从原始DOM导入到新DOM。请参见DOM中的节点具有其所属文档的概念(因此您的错误的\u文档\u错误) 因此,您需要将节点从原始DOM导入到新DOM。请参见Java文档中的 使用方法 总结: public Node cloneNode(boolean deep) 返回此节点的副本, i、 e.,作为通用副本 节点的

我有一个XML文件(在左边),我想创建多个文件(在右边):


任何指向正确方向的帮助都将不胜感激

DOM中的节点有其所属文档的概念(因此您的
错误的\u文档\u错误


因此,您需要将节点从原始DOM导入到新DOM。请参见DOM中的节点具有其所属文档的概念(因此您的
错误的\u文档\u错误


因此,您需要将节点从原始DOM导入到新DOM。请参见Java文档中的

使用方法

总结:

public Node cloneNode(boolean deep)
返回此节点的副本, i、 e.,作为通用副本 节点的构造函数。复制品 节点没有父节点;(parentNode是 空)

克隆一个元素会复制所有元素 属性及其值,包括 由XML处理器生成的 表示默认属性,但 此方法不会复制任何文本 包含,除非它是深度克隆, 因为文本包含在子对象中 文本节点。克隆属性 直接地,而不是像这样被克隆 元素克隆操作的一部分, 返回指定的属性( 指定的值为true)。克隆任何其他 节点类型只返回 这个节点

请注意,克隆不可变子树 结果是一个可变副本,但 EntityReference克隆的子代 是只读的。此外,克隆 指定了未指定的Attr节点。 和,克隆文档,文档类型, 实体,表示法节点为 依赖于实现

编辑:

import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.*;
import javax.xml.transform.*; 
import javax.xml.transform.dom.DOMSource; 
import javax.xml.transform.stream.StreamResult;

public class Test{
 static public void main(String[] arg) throws Exception{

 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
 DocumentBuilder builder = factory.newDocumentBuilder();
 Document doc = builder.parse("foo.xml");

 TransformerFactory tranFactory = TransformerFactory.newInstance(); 
 Transformer aTransformer = tranFactory.newTransformer(); 


 NodeList list = doc.getFirstChild().getChildNodes();

 for (int i=0; i<list.getLength(); i++){
    Node element = list.item(i).cloneNode(true);

 if(element.hasChildNodes()){
   Source src = new DOMSource(element); 
   FileOutputStream fs=new FileOutputStream("k" + i + ".xml");
   Result dest = new StreamResult(fs);
   aTransformer.transform(src, dest);
   fs.close();
   }
   }

  }
}
import java.io.*;
导入javax.xml.parsers.*;
导入org.w3c.dom.*;
导入org.xml.sax.*;
导入javax.xml.transform.*;
导入javax.xml.transform.dom.DOMSource;
导入javax.xml.transform.stream.StreamResult;
公开课考试{
静态公共void main(字符串[]arg)引发异常{
DocumentBuilderFactory工厂=DocumentBuilderFactory.newInstance();
DocumentBuilder=factory.newDocumentBuilder();
documentdoc=builder.parse(“foo.xml”);
TransformerFactory transfactory=TransformerFactory.newInstance();
变压器变压器变压器=transfactory.newTransformer();
NodeList=doc.getFirstChild().getChildNodes();

对于Java文档中的(inti=0;i)

使用方法

总结:

public Node cloneNode(boolean deep)
返回此节点的副本, i、 e.,作为通用副本 节点的构造函数。重复的 节点没有父节点;(父节点为 空)

克隆一个元素会复制所有元素 属性及其值,包括 由XML处理器生成的 表示默认属性,但 此方法不会复制任何文本 包含,除非它是深度克隆, 因为文本包含在子对象中 文本节点。克隆属性 直接地,而不是像这样被克隆 元素克隆操作的一部分, 返回指定的属性( 指定的为true)。克隆任何其他 节点类型只返回 这个节点

请注意,克隆不可变子树 结果是一个可变副本,但 EntityReference克隆的子代 是只读的。此外,的克隆 指定了未指定的Attr节点。 和,克隆文档,文档类型, 实体,表示法节点为 依赖于实现

编辑:

import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.*;
import javax.xml.transform.*; 
import javax.xml.transform.dom.DOMSource; 
import javax.xml.transform.stream.StreamResult;

public class Test{
 static public void main(String[] arg) throws Exception{

 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
 DocumentBuilder builder = factory.newDocumentBuilder();
 Document doc = builder.parse("foo.xml");

 TransformerFactory tranFactory = TransformerFactory.newInstance(); 
 Transformer aTransformer = tranFactory.newTransformer(); 


 NodeList list = doc.getFirstChild().getChildNodes();

 for (int i=0; i<list.getLength(); i++){
    Node element = list.item(i).cloneNode(true);

 if(element.hasChildNodes()){
   Source src = new DOMSource(element); 
   FileOutputStream fs=new FileOutputStream("k" + i + ".xml");
   Result dest = new StreamResult(fs);
   aTransformer.transform(src, dest);
   fs.close();
   }
   }

  }
}
import java.io.*;
导入javax.xml.parsers.*;
导入org.w3c.dom.*;
导入org.xml.sax.*;
导入javax.xml.transform.*;
导入javax.xml.transform.dom.DOMSource;
导入javax.xml.transform.stream.StreamResult;
公开课考试{
静态公共void main(字符串[]arg)引发异常{
DocumentBuilderFactory工厂=DocumentBuilderFactory.newInstance();
DocumentBuilder=factory.newDocumentBuilder();
documentdoc=builder.parse(“foo.xml”);
TransformerFactory transfactory=TransformerFactory.newInstance();
变压器变压器变压器=transfactory.newTransformer();
NodeList=doc.getFirstChild().getChildNodes();

对于(int i=0;i文档来自何处?是否在其他地方声明?文档格式在第三方应用程序中声明,我试图通过保存为xml从excel电子表格中提取数据,然后使用第三方导入工具,该工具要求文件作为单个文件,而不是一个大文件文档来自何处?是它是在其他地方声明的吗?文档格式是在第三方应用程序中声明的,我试图通过另存为xml从excel电子表格中提取数据,然后使用第三方导入工具,该工具要求文件作为单个文件,而不是一个大文件更改为newDocument.getFirstChild().appendChild(childNodes.item(i).cloneNode(true));仍然会收到相同的错误谢谢!回答太棒了,我只是想了解出了什么问题,而您已经为我完成了所有的工作!通过更改为newDocument.getFirstChild().appendChild(childNodes.item(I).cloneNode(true));仍然会收到相同的错误谢谢!回答太棒了,我只是想了解出了什么问题,而你已经为我完成了所有的工作!添加了行newDocument.importNode(childNodes.item(I),true);但仍然给出相同的错误否!因为我是一个十足的白痴!一旦我分配了结果,我就可以将其附加到子节点,瞧,这就是我需要的XML。我新建了我只需要朝正确的方向推一推谢谢。那很好。我有点猜测这就是问题所在,但很高兴它起了作用。添加了行newDocument.importNode(childNodes.item(i),true);但仍然给出相同的错误否!因为我是一个十足的白痴!一旦我分配了结果,我就可以将其附加到子节点,瞧,这就是我需要的XML。我知道,我只需要朝正确的方向推一下,谢谢。这很好。我有点猜测这就是问题所在,但很高兴它起了作用。
import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.*;
import javax.xml.transform.*; 
import javax.xml.transform.dom.DOMSource; 
import javax.xml.transform.stream.StreamResult;

public class Test{
 static public void main(String[] arg) throws Exception{

 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
 DocumentBuilder builder = factory.newDocumentBuilder();
 Document doc = builder.parse("foo.xml");

 TransformerFactory tranFactory = TransformerFactory.newInstance(); 
 Transformer aTransformer = tranFactory.newTransformer(); 


 NodeList list = doc.getFirstChild().getChildNodes();

 for (int i=0; i<list.getLength(); i++){
    Node element = list.item(i).cloneNode(true);

 if(element.hasChildNodes()){
   Source src = new DOMSource(element); 
   FileOutputStream fs=new FileOutputStream("k" + i + ".xml");
   Result dest = new StreamResult(fs);
   aTransformer.transform(src, dest);
   fs.close();
   }
   }

  }
}