Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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
拆分XML并维护标题_Xml_Split - Fatal编程技术网

拆分XML并维护标题

拆分XML并维护标题,xml,split,Xml,Split,我有一个很大的XML文件,我需要拆分并维护一些标题细节。请参见下面的示例 Original <ArticleExportPackage> <PackageInfo> <License>1234</License> </PackageInfo> <ItemInfo> <ItemID>ABC123> </ItemIn

我有一个很大的XML文件,我需要拆分并维护一些标题细节。请参见下面的示例

Original
<ArticleExportPackage>
     <PackageInfo>
          <License>1234</License>
     </PackageInfo>     
     <ItemInfo>
          <ItemID>ABC123>
     </ItemInfo>
     <ItemInfo>
          <ItemID>BCD123>
     </ItemInfo>
</ArticleExportPackage>
原件
1234
ABC123>
BCD123>
拆分后:

#1
<ArticleExportPackage>
     <PackageInfo>
          <License>1234</License>
     </PackageInfo>     
     <ItemInfo>
          <ItemID>ABC123>
     </ItemInfo>
</ArticleExportPackage>

#2
<ArticleExportPackage>
     <PackageInfo>
          <License>1234</License>
     </PackageInfo>     
     <ItemInfo>
          <ItemID>BCD123>
     </ItemInfo>
</ArticleExportPackage>
#1
1234
ABC123>
#2
1234
BCD123>

非常感谢您的指导

下面是用于执行拆分的代码

导入com.ximpleware.*;
导入java.io.*;
公共类simpleSplit{
公共静态void main(字符串[]s)引发VTDException、IOException{
VTDGen vg=新VTDGen();
如果(!vg.parseFile(“input.xml”,true))//名称空间感知已禁用
返回;
VTDNav vn=vg.getNav();
长l=0;
//获取packageInfo的片段描述符
if(vn.toElement(VTDNav.FIRST_CHILD,“PackageInfo”){
l=vn.getElementFragment();
}否则{
System.out.println(“未找到packageInfo”);
}       
自动驾驶仪ap=新自动驾驶仪(vn);
XMLModifier xm=新的XMLModifier(vn);
ap.selectXPath(“/ArticleExportPackage/ItemInfo”);
int i=0,j=1;
字节[]ba1=“\n”.getBytes();
字节[]ba2=“\n”.getBytes();
byte[]ba=“\n”.getBytes();
而((i=ap.evalXPath())!=-1){
FileOutputStream fios=新的FileOutputStream(“文件”+j+“.xml”);
fios.write(ba1);//写入起始标记
vn.dumpFragment(l,fios);//写入Packageinfo片段
fios.write(文学学士);
vn.dumpFragment(fios);//编写ItemInfo片段
fios.write(ba2);//写入结束标记
j++;
}
}
}

下面是使用…进行拆分的代码

导入com.ximpleware.*;
导入java.io.*;
公共类simpleSplit{
公共静态void main(字符串[]s)引发VTDException、IOException{
VTDGen vg=新VTDGen();
如果(!vg.parseFile(“input.xml”,true))//名称空间感知已禁用
返回;
VTDNav vn=vg.getNav();
长l=0;
//获取packageInfo的片段描述符
if(vn.toElement(VTDNav.FIRST_CHILD,“PackageInfo”){
l=vn.getElementFragment();
}否则{
System.out.println(“未找到packageInfo”);
}       
自动驾驶仪ap=新自动驾驶仪(vn);
XMLModifier xm=新的XMLModifier(vn);
ap.selectXPath(“/ArticleExportPackage/ItemInfo”);
int i=0,j=1;
字节[]ba1=“\n”.getBytes();
字节[]ba2=“\n”.getBytes();
byte[]ba=“\n”.getBytes();
而((i=ap.evalXPath())!=-1){
FileOutputStream fios=新的FileOutputStream(“文件”+j+“.xml”);
fios.write(ba1);//写入起始标记
vn.dumpFragment(l,fios);//写入Packageinfo片段
fios.write(文学学士);
vn.dumpFragment(fios);//编写ItemInfo片段
fios.write(ba2);//写入结束标记
j++;
}
}
}
import com.ximpleware.*;
import java.io.*;
public class simpleSplit {
    public static void main(String[] s) throws VTDException, IOException{
        VTDGen vg = new VTDGen();
        if (!vg.parseFile("input.xml", true)) //namespace awareness disabled
            return;
        VTDNav vn = vg.getNav();
        long l=0;
        // get the fragment descriptor of packageInfo
        if(vn.toElement(VTDNav.FIRST_CHILD,"PackageInfo")){ 
            l=vn.getElementFragment();
        }else{
            System.out.println("packageInfo not found");
        }       
        AutoPilot ap = new AutoPilot(vn);
        XMLModifier xm = new XMLModifier(vn);
        ap.selectXPath("/ArticleExportPackage/ItemInfo");
        int i=0,j=1;
        byte[] ba1 = "<ArticleExportPackage>\n".getBytes();
        byte[] ba2 = "\n</ArticleExportPackage>".getBytes();
        byte[] ba = "\n".getBytes();
        while((i=ap.evalXPath())!=-1){
            FileOutputStream fios = new FileOutputStream("file"+j+".xml");
            fios.write(ba1);//write starting tag
            vn.dumpFragment(l,fios); // write Packageinfo fragment
            fios.write(ba);
            vn.dumpFragment(fios);// write the ItemInfo fragment
            fios.write(ba2);// write ending tag
            j++;
        }
    }
}