Java 将XML拆分为多个XML文件
我有一个XML文件,其中包含多个图片的数据,如GPS坐标、日期/时间,以及一些需要拆分为多个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 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岁的问题,并对它保持谦虚。