大文件的XML拆分

大文件的XML拆分,xml,Xml,我有一个15GB的XML文件,我想分割它,它有大约3亿行。它没有任何相互依赖的顶级节点。是否有任何工具可以随时为我做到这一点?不是Xml工具,但可能会有所帮助,我将其用于2G文件,它一点也不介意,但请确保关闭自动备份功能。我认为您必须手动拆分,除非您对以编程方式进行拆分感兴趣。这就做到了,尽管它没有提到处理过的XML文件的最大大小。手动操作时,出现的第一个问题是如何打开文件本身 我会推荐一个非常简单的文本编辑器,比如。在处理如此大的文件时,关闭所有形式的语法高亮显示和/或折叠总是很有用的 其他值

我有一个15GB的XML文件,我想分割它,它有大约3亿行。它没有任何相互依赖的顶级节点。是否有任何工具可以随时为我做到这一点?

不是Xml工具,但可能会有所帮助,我将其用于2G文件,它一点也不介意,但请确保关闭自动备份功能。

我认为您必须手动拆分,除非您对以编程方式进行拆分感兴趣。这就做到了,尽管它没有提到处理过的XML文件的最大大小。手动操作时,出现的第一个问题是如何打开文件本身

我会推荐一个非常简单的文本编辑器,比如。在处理如此大的文件时,关闭所有形式的语法高亮显示和/或折叠总是很有用的

其他值得考虑的方案:

  • -我从未尝试过这种尺寸的产品,但如果它与其他JGSoft产品一样,它应该可以轻松工作。记住关闭语法高亮显示

  • -我使用过1GB大小的文件,工作起来好像什么都没有


  • 下面是一个低内存占用脚本,可以在免费的firstobject XML编辑器(foxe)中使用CMarkup文件模式进行此操作。我不确定您所说的不相互依赖的顶级节点或标记检查是什么意思,但假设在根元素下有数百万顶级元素,其中包含对象属性或行,每个属性或行都需要作为一个单元保存在一起,并且您希望每个输出文件有一百万个,那么您可以这样做:

    split_xml_15GB() { int nObjectCount = 0, nFileCount = 0; CMarkup xmlInput, xmlOutput; xmlInput.Open( "15GB.xml", MDF_READFILE ); xmlInput.FindElem(); // root str sRootTag = xmlInput.GetTagName(); xmlInput.IntoElem(); while ( xmlInput.FindElem() ) { if ( nObjectCount == 0 ) { ++nFileCount; xmlOutput.Open( "piece" + nFileCount + ".xml", MDF_WRITEFILE ); xmlOutput.AddElem( sRootTag ); xmlOutput.IntoElem(); } xmlOutput.AddSubDoc( xmlInput.GetSubDoc() ); ++nObjectCount; if ( nObjectCount == 1000000 ) { xmlOutput.Close(); nObjectCount = 0; } } if ( nObjectCount ) xmlOutput.Close(); xmlInput.Close(); return nFileCount; } 拆分xml_15GB() { int nObjectCount=0,nFileCount=0; CMarkup xmlInput,xmlOutput; Open(“15GB.xml”,MDF_READFILE); xmlInput.FindElem();//根 str sRootTag=xmlInput.GetTagName(); xmlInput.intolem(); while(xmlInput.FindElem()) { 如果(nObjectCount==0) { ++恩菲雷克蒙特; xmlOutput.Open(“piece”+nFileCount+“.xml”,MDF_WRITEFILE); AddElem(sRootTag); xmlOutput.intolem(); } xmlOutput.AddSubDoc(xmlInput.GetSubDoc()); ++无对象计数; 如果(nObjectCount==1000000) { xmlOutput.Close(); nObjectCount=0; } } if(nObjectCount) xmlOutput.Close(); xmlInput.Close(); 返回nFileCount; } 我在youtube上发布了一段视频和一篇文章:


    您需要以何种方式拆分它?使用
    XmlReader.ReadSubTree
    编写代码非常简单。它将针对当前元素及其所有子元素返回一个新的xmlReader实例。因此,移动到根目录的第一个子目录,调用ReadSubtree,编写所有这些节点,使用原始读取器调用Read(),并循环直到完成。

    xmlspit-一种分割大型XML文件的命令行工具

    xml_split-将巨大的xml文档拆分为更小的块

    通过Bhayanakmat拆分该XML (没有源代码,我无法让这个工作)


    类似的问题:

    QXMLEdit有一个专门的功能:我在维基百科转储中成功地使用了它。~2.7Gio文件变成了一堆~1400000个文件(每页一个)。它甚至允许您将它们分配到子文件夹中。

    开源库comma有几种工具可以在非常大的XMl文件中查找数据,并将这些文件拆分为较小的文件

    这些工具是使用expat-SAX解析器构建的,因此它们不会用xmlstarlet和saxon之类的DOM树来填充内存。

    将其用于分割雅虎问答数据集
    
    Used this for splitting Yahoo Q&A dataset
    
        count = 0
        file_count = 1
        with open('filepath') as f:
    
        current_file = ""
    
        for line in f:
            current_file = current_file + line
    
            if "</your tag to split>" in line:
                count = count + 1
    
            if count==50000:
                current_file = current_file + "</endTag>"
                with open('filepath/Split/file_' +str(file_count)+'.xml' , 'w') as split:
                    split.write(current_file)
                file_count = file_count + 1
                current_file = "<?xml version='1.0' encoding='UTF-8'?>\n<endTag>"
                count = 0
    
    current_file = current_file + "</endTag>"
    with open('filepath/Split/file_' +str(file_count)+'.xml' , 'w') as split:
        split.write(current_file)
    
    计数=0 文件计数=1 将open('filepath')作为f: 当前_文件=“” 对于f中的行: 当前文件=当前文件+行 如果行中有“”: 计数=计数+1 如果计数=50000: 当前文件=当前文件+“” 将open('filepath/Split/file_'+str(file_count)+'.xml、'w')作为拆分: split.write(当前_文件) 文件计数=文件计数+1 当前\u文件=“\n” 计数=0 当前文件=当前文件+“” 将open('filepath/Split/file_'+str(file_count)+'.xml、'w')作为拆分: split.write(当前_文件)
    我使用了XmlSplit向导工具。它确实工作得很好,您可以指定拆分方法,如元素、行、文件数或文件大小。唯一的问题是我不得不花99美元买它,因为试用版不允许你分割所有数据,只允许分割奇数个文件。我能够分割一个70GB的文件

    也许这个问题仍然是现实的,我相信它可以帮助一些人。 有一个xml编辑器,其中包含一个用于拆分大文件的工具。只需要片段大小。还有反向功能可以将xml文件链接在一起(!)。 非商业用途是免费的,许可证也不贵。
    不需要安装。对我来说,它工作得非常好(我有5GB的文件)。

    提供的链接中的示例是否进行标记检查?如果你问的是CodeProject链接,我认为它会在每个分割文件的开头和结尾插入根节点。不幸的是,它在750Mbi后崩溃,这可以证明EmEditor编辑大型文件的效率。好的编辑,值得更多的了解;可惜免费版本被删除了。谢谢,@bobince。我自己没有机会使用它,但听说过它的有效性。错误#16说1GB文件超过了最大文件大小限制。它可以拆分的最大大小是多少?这些对我来说在更小的文件(~1GB)上失败了。xmlstarlet和saxon对我们来说也失败了,所以这就是为什么我在逗号中添加了xml工具。我在链接项中添加了一个解决方案。下面是关于如何使用UE拆分大文件的说明,我不知道您为什么被否决,这是一个非常有用的解决方案,开源工具。这应该是公认的答案。非常有用的工具,开源,免费使用。一些额外的细节可能有助于投票。这是t