2014-02-28 131 views
0

我需要根据标签的开始和结束将我的xml分割为多个xml。对于这个我试着用下面的代码使用java分割xml基于xml标签的多个xmls

public class XmlSplit { 

    public static void main(String [] args) throws Exception { 
    File input = new File("/home/dev702/Desktop/cadgraf-test/Data_Entry.xml"); 
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
    Document doc = (Document) dbf.newDocumentBuilder().parse(input); 
    XPath xpath = XPathFactory.newInstance().newXPath(); 

    NodeList nodes = (NodeList) xpath.evaluate("//Data_x0020_Entry", doc, XPathConstants.NODESET); 

    int itemsPerFile = 500; 
    int fileNumber = 0; 
    Document currentDoc = (Document) dbf.newDocumentBuilder().newDocument(); 
    Node rootNode; 
    rootNode = currentDoc.createElement("Data_x0020_Entry"); 
    File currentFile = new File(fileNumber+".xml"); 
    for (int i=1; i <= nodes.getLength(); i++) { 
     Node imported = currentDoc.importNode(nodes.item(i-1), true); 
     rootNode.appendChild(imported); 

     if (i % itemsPerFile == 0) { 
      writeToFile(rootNode, currentFile); 

      rootNode = currentDoc.createElement("Data_x0020_Entry"); 
      currentFile = new File((++fileNumber)+".xml"); 
     } 
    } 

    writeToFile(rootNode, currentFile); 
} 

private static void writeToFile(Node node, File file) throws Exception { 
    Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
    transformer.transform(new DOMSource(node), new StreamResult(new FileWriter(file))); 
} 
} 

在这里我得到currentDoc.createElement错误。我无法编译这段代码,它说createElement不可用。

示例XML文件

<?xml version="1.0" encoding="UTF-8"?> 
<dataroot 
    xmlns:od="urn:schemas-microsoft-com:officedata" 
    xmlns:xsi="w3.org/2001/XMLSchema-instance" ; 
    xsi:noNamespaceSchemaLocation="Data%20Entry.xsd" 
    generated="2014-02-12T14:35:47" 
> 
    <Data_x0020_Entry> 
     <ID>1004</ID> 
     <User>006Parthiban</User> 
     <Data_x0020_Entry_x0020_Date>2013-12-26T00:00:00</Data_x0020_Entry_x0020_Date> 
     <Publication>Daily Thanthi</Publication> 
     <Edition>CE City Edition</Edition> 
     <Location>Bangalore</Location> 
    </Data_x0020_Entry> 
</dataroot> 
+0

u能张贴示例XML文件that..what错误你得到的堆栈跟踪请...并更改节点根节点;到元素根节点,并尝试 – Naren

+0

我在自己的示值误差使用NetBeans上徘徊这显示“无法找到方法‘的createElement(字符串)’。因此,我将无法运行该文件 – user3354849

+0

是dataroot仍然在你的劈裂xml文件? –

回答

1

我看不出在这个代码编译的任何问题。请检查您的导入声明并确认您已导入适当的课程。我进口类列表是如下

import java.io.File; 
import java.io.FileWriter; 

import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.transform.Transformer; 
import javax.xml.transform.TransformerFactory; 
import javax.xml.transform.dom.DOMSource; 
import javax.xml.transform.stream.StreamResult; 
import javax.xml.xpath.XPath; 
import javax.xml.xpath.XPathConstants; 
import javax.xml.xpath.XPathFactory; 

import org.w3c.dom.Document; 
import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 
1

我觉得你有进口import javax.swing.text.Document;变化,为import org.w3c.dom.Document;

而且如果乌拉圭回合使用的Swing太不是使用完全合格,对于创建文档

org.w3c.dom.Document currentDoc = (org.w3c.dom.Document) dbf.newDocumentBuilder().newDocument(); 

更新

我认为根元素应该是对于分割xml的“dataroot”。你需要改变你的代码来生成正确数量的xml文件(看下面的代码)..看看下面的代码..我测试了
int itemsPerFile = 2; ..它工作正常..

注意删除“;”从namespcae后输入XML文件

import java.io.File; 
import java.io.FileWriter; 

import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.transform.Transformer; 
import javax.xml.transform.TransformerFactory; 
import javax.xml.transform.dom.DOMSource; 
import javax.xml.transform.stream.StreamResult; 
import javax.xml.xpath.XPath; 
import javax.xml.xpath.XPathConstants; 
import javax.xml.xpath.XPathFactory; 

import org.w3c.dom.Document; 
import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 

    public class XmlSplit { 

    public static void main(String [] args) throws Exception { 
    File input = new File("src/test.xml"); 
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
    Document doc = (Document) dbf.newDocumentBuilder().parse(input); 
    XPath xpath = XPathFactory.newInstance().newXPath(); 
    NodeList nodes = (NodeList) xpath.evaluate("//Data_x0020_Entry", doc, XPathConstants.NODESET); 
    int itemsPerFile = 2; 
    int fileNumber = 0; 
    Document currentDoc = (Document) dbf.newDocumentBuilder().newDocument(); 
    Node rootNode; 


    rootNode = currentDoc.createElement("dataroot"); 
    File currentFile = new File(fileNumber+".xml"); 
    for (int i=1; i <= nodes.getLength(); i++) { 
     Node imported = currentDoc.importNode(nodes.item(i-1), true); 
     rootNode.appendChild(imported); 

     if (i % itemsPerFile == 0) { 
      writeToFile(rootNode, currentFile); 
      rootNode = currentDoc.createElement("dataroot"); 
      currentFile = new File((++fileNumber)+".xml"); 
     } 
     else 
     { 
       writeToFile(rootNode, currentFile); 
     } 
    } 

} 

private static void writeToFile(Node node, File file) throws Exception { 
    Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
    transformer.transform(new DOMSource(node), new StreamResult(new FileWriter(file))); 
} 
} 

让我知道如果u面对任何问题:)

+0

导入命令是问题,但是当我运行它不会返回anything..its返回为空 – user3354849

+0

使乌拉圭回合后样品输入XML文件,所以我们可以测试问题所在 – Naren

+0

我的示例XML: 006Parthiban 2013-12-26T00:00:00 日报Thanthi CE城市版 班加罗尔 user3354849