Разделение XML на несколько xml-файлов

У меня есть файл 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> 

Я хочу, чтобы он выглядел примерно так:

 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> 

….. Я прочитал этот вопрос: Сплит XML в нескольких XML-файлах

И попытался немного изменить код для моего файла после импорта всего. Интересно, есть ли у кого-нибудь хорошие идеи о том, как изменить мой код, чтобы сделать косу, как в вопросе выше.

Вот базовая структура, которую вы могли бы использовать при программировании на Android. Это откроет xml-файл с веб-адреса (R.string.XmlUrlAddress). Затем он будет разбирать строку и записывать в другой файл, возможно, сохраненный на вашем устройстве 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 } 

Это очень просто в 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> на <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> 

Возможно, что есть лучший способ, но вы можете посмотреть в SAX XML Parser, а затем проанализировать место, в которое хотите вырезать файл, и вырезать файл (убедитесь, что вы закончили с соответствующими тегами, а затем Снова запустите теги для следующего файла, иначе у вас будет 2 недопустимых xml-файла).

Это очень старый вопрос, но, возможно, это поможет кому-то. В SO много ответов и т. Д., Поэтому я попытался сделать что-то универсальное. Вот мое простое приложение SWING, которое спасло меня. У меня был огромный файл, где в качестве корневого элемента был PRODUCT, а Products – как элементы. Поэтому, если кому-то нужно загрузить структуру, выберите корневой элемент (который будет во всех файлах) и элемент элемента, который будет окружен корневым элементом, это может вам помочь.