Разделение XML на несколько файлов XML - PullRequest
4 голосов
/ 23 июня 2011

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

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

Ответы [ 4 ]

3 голосов
/ 23 июня 2011

В 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>
0 голосов
/ 11 мая 2016

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

0 голосов
/ 23 июня 2011

Вот основная структура, которую вы можете использовать при программировании на Android. Это откроет файл XML с веб-адреса (R.string.XmlUrlAddress). Затем он проанализирует строку и запишет в другой файл, вероятно, сохраненный на вашем устройстве Android?

Закомментированные области - это код, который я не написал, а не комментарии о том, что делает код. Я не хотел тратить время на поиск файлового кода, который должен быть довольно простым.

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
}
0 голосов
/ 23 июня 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...