Java 将XML拆分为多个XML文件

Java 将XML拆分为多个XML文件,java,android,xml,xml-parsing,Java,Android,Xml,Xml Parsing,我有一个XML文件,其中包含多个图片的数据,如GPS坐标、日期/时间,以及一些需要拆分为多个XML文件的图像数据 <?xml version="1.0" encoding="UTF-8"?> <kml xmlns="http://earth.google.com/kml/2.1"> <Document> <Placemark> <name> //picture 1 info <name>

我有一个XML文件,其中包含多个图片的数据,如GPS坐标、日期/时间,以及一些需要拆分为多个XML文件的图像数据

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
<Document>
    <Placemark>
        <name> //picture 1 info <name>
        <Point>
            <coordinates> //gps 1 cords <coordinates>
        <Point>
    <Placemark>
    <Placemark>
        <name> //picture 2 info <name>
        <Point>
            <coordinates> //gps 2 cords <coordinates>
        <Point>
    <Placemark>
<Document>

//图片1信息
//gps 1跳线
//图片2信息
//gps 2跳线
我希望它看起来像这样:

File 1:
<Placemark>
<Name> //picture 1 info <name>
<Point>
    <coordinates> //gps 1 cords <coordinates>
<Point>
<Placemark>

File 2:
<Placemark>
<Name> //picture 2 info <name>
<Point>
    <coordinates> //gps 2 cords <coordinates>
<Point>
<Placemark>
文件1:
//图片1信息
//gps 1跳线
文件2:
//图片2信息
//gps 2跳线
……我读到这个问题:


并尝试在导入所有内容后对我的文件的代码进行一点修改。想知道是否有人对如何修改我的代码来执行上述问题中的spit有什么好主意。

可能有更好的方法,但您可以研究SAX XML解析器,然后解析到您想要剪切文件的位置,然后剪切文件(确保以正确的标记结束,然后为下一个文件再次启动标记,否则将有2个无效的xml文件)。

这是在Android上编程时可以使用的基本结构。这将从web地址(R.string.XmlUrlAddress)打开xml文件。然后它会解析字符串并写入另一个文件,可能存储在您的Android设备上

注释区域是我没有编写的代码,而不是对代码正在执行的操作的注释。我不想花时间查找文件io代码,这应该是非常直接的

URL url = new URL(getString(R.string.XmlUrlAddress));
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new InputSource(url.openStream()));
doc.getDocumentElement().normalize();

NodeList nodeList = doc.getElementsByTagName("Placemark");
String[] files = new String[nodeList.getLength()];

for (int i=0; i < nodeList.getLength(); i++) {
    files[i] = "file" + i + ".xml";
    //Create and open files[i] file.
    //Write opening tag.  "<Placemark>"

    Node node = nodeList.item(i);
    Element element = (Element)node;

    NodeList nameList = element.getElementsByTagName("name");
    Element name = (Element)nameList.item(0);
    nameList = name.getChildNodes();
    String name = nameList.item(0).getNodeValue();
    //Write name to file.  "<name>" + name + "</name>"

    NodeList pointList = element.getElementsByTagName("Point");
    String[] points = new String[pointList.getLength()];

    //Write opening Points tag. "<Points>"
    for (int j=0; j < pointList.getLength(); j++) {
        Node cNode = pointList.item(j);
        Element cElement = (Element)cNode;

        NodeList coordinateList = element.getElementsByTagName("coordinates");
        Element coordinateElement = (Element)coordinateList.item(0);
        coordinateList = coordinateElement.getChildNodes();
        points[j] = coordinateList.item(0).getNodeValue();

        //Write points[j] to file. "<coordinates>" + points[j] + "</coordinates>"
    }
    //Write end Points tag.  "</Points>"
    //Write end document tag.  "</Placemark>"
    //Close file
}
URL URL=newurl(getString(R.string.XmlUrlAddress));
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumentBuilder();
Document doc=db.parse(新的输入源(url.openStream());
doc.getDocumentElement().normalize();
NodeList NodeList=doc.getElementsByTagName(“Placemark”);
String[]files=新字符串[nodeList.getLength()];
for(int i=0;i
在XSLT 2.0中非常简单:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="*">
    <xsl:copy><xsl:apply-templates/></xsl:copy>
  </xsl:template>
  <xsl:template match="Placemark">
    <xsl:result-document href="Placemark{position()}.xml">
      <xsl:next-match/>
    </xsl:result-document>
  </xsl:template>
</xsl:stylesheet>


这是一个非常古老的问题,但也许这会对某些人有所帮助。在很多答案中,等等,所以我尝试做一些通用的东西。是我的简单SWING应用程序救了我。我有一个巨大的文件,其中产品作为根元素,产品作为项元素。因此,如果有人需要加载结构,请选择根元素(将包含在所有文件中)和被根元素包围的item元素,这可以帮助您。

确保您正确关闭标记,即
您将此标记为Android…这是您正在编写的语言/系统吗?还是您正在用Java或C#?@Tyler Ferraro我正在用Java编写,但我将在一个应用程序中实现它Android应用程序入门学习XML的基础知识。你不需要使用结束标记。网上有数百万XML教程,因此没有理由在问题中提出如此破碎的XML。祝贺你回答了一个5岁的问题,并对它保持谦虚。