2011-06-22 180 views
4

我有一個XML文件,其中包含多個圖片的數據,如GPS座標,日期/時間以及一些圖像數據,我需要將它們拆分爲多個XML文件。將XML拆分爲多個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> 

.....我讀了這個問題: Split XML in Multiple XML files

,並試圖修改代碼一點點我的導入一切後的文件。想知道如果任何人有任何好的想法如何修改我的代碼做上述問題的吐痰。

+0

確保你正確地關閉了你的標籤,即'' – mrk

+0

你有這個標籤爲Android ...是你正在編碼它的語言/系統?或者你只是在Java中做它?還是C#? – Genzume

+0

@Tyler Ferraro我正在用Java編寫它,但我將要將它實現成一款Android應用程序 – mancha89

回答

0

這是您在Android上編程時可以使用的基本結構。這將從網址(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 
} 
+0

恭喜你回答了一個5歲的問題,並對此表示謙虛。 – Genzume

+0

謝謝,歡迎您:) –

0

可能有更好的方法,但是你可以看一下SAX XML解析器,然後解析到你想要剪切文件的地方,然後剪切文件(確保你以適當的方式結束標籤,然後再次爲下一個文件啓動標籤,否則您將有2個無效的xml文件)。

3

它在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

這是很老的問題,但也許這將幫助別人。在這裏有很多答案等,所以我試圖做出普遍的東西。 Here是我簡單的SWING應用程序,它拯救了我。我有一個巨大的文件,其中PRODUCT是根元素,Products是項目元素。因此,如果有人需要加載結構,選擇根元素(將在所有文件中)和項目元素,這將由根元素包圍,這可以幫助你。