2011-06-22 67 views
4

GPS座標、日付/時刻、複数のXMLファイルに分割する必要がある画像データなど、複数の画像のデータを持つXMLファイルがあります。 XMLを複数のxmlファイルに分割する

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

は、私はそれがこのような何かを見てみたい Split XML in Multiple XML files

をし、ためのコードを少し変更しようとした私のすべてをインポートした後のファイル。誰かが上の質問のように吐き気をするために自分のコードを修正する方法について良いアイデアを持っていたかどうか分かります。

+0

タグを正しく閉じてください。つまり、「」 – mrk

+0

これはAndroidとしてタグ付けされています...あなたはそれをどの言語/システムでコーディングしていますか?それともJavaでやっていますか?またはC#? – Genzume

+0

@タイラー・フェラーロ私はJavaで書いていますが、私はそれを道路のAndroidアプリに実装しようとしています – mancha89

答えて

0

Androidでプログラミングする場合に使用できる基本的な構造は次のとおりです。これは、Webアドレス(R.string.XmlUrlAddress)からxmlファイルを開きます。それはおそらくあなたの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

5歳の質問に答えて、それについて謙虚にお祝いをしています。 – Genzume

+0

ありがとう、あなたは歓迎です:) –

0

もっと良い方法があるかもしれませんが、SAX XML Parserを調べて、ファイルをカットしたい場所を解析し、ファイルをカットしてください。タグを作成してから、次のファイルのタグをもう一度開始します。そうしないと、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、項目要素としてプロダクトでした。だから誰かが構造をロードする必要がある場合は、ルート要素(すべてのファイルにあります)とルート要素で囲む項目要素を選択してください。これはあなたを助けることができます。

関連する問題