2012-04-17 26 views
4

こんにちは私はW3Schools XSLT Tryitエディタを使用してKMLファイル(XMLファイルとして保存されています)を変換しようとしていますが、ここに私のXMLファイルの抜粋です:XSLTを使用してXML(旧KML)を変換する

<?xml version="1.0" encoding="UTF-8"?> 
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2"> 
<Document> 
    <name>Bnsf RR cut</name> 
    <open>1</open> 
    <Style> 
    <ListStyle> 
    <ItemIcon> 
    <href>kmzicon.png</href> 
    </ItemIcon> 
    </ListStyle> 
    </Style> 
    <Folder> 
    <name>11/10/11 8:17:20 AM</name> 
    <Placemark> 
    <name>Track</name> 
    </Placemark> 
    </Folder> 
    <Placemark> 
    <name>Gray Mesa</name> 
    <description><![CDATA[<img width="800" src="1.jpg"/>]]></description> 
    <Point> 
    <coordinates>-106.493097,34.446357,1692.000000</coordinates> 
    </Point> 
    </Placemark> 
</Document> 
</kml> 

そして、私のXSLT:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!-- Edited by XMLSpy® --> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="/"> 
     <xsl:for-each select="Document/Placemark"> 
     <xsl:value-of select="name"/> 
     <xsl:value-of select="description"/> 
     </xsl:for-each> 
</xsl:template> 
</xsl:stylesheet> 

私はXMLコードでKMLタグを削除した場合、それは正常に動作しますが、私はむしろこれを試してみて、自動化するだろうと多数のXMLからコードを削除する必要はありません。私は "kml"をXSLTコード "/ kml/Document/Placemark"に追加しようとしましたが、それは動作しません。ありがとうございました!私はこれが私の目的のために働くだろうと思い

<Document> 
    <Placemark> 
    <name>Gray Mesa</name> 
    <description><![CDATA[<img width="800" src="1.jpg"/>]]></description> 
    <Point> 
    <coordinates>-106.493097,34.446357,1692.000000</coordinates> 
    </Point> 
    </Placemark> 
</Document> 

:私は私の変換されたXMLは次のようになりたい何

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:kml="http://www.opengis.net/kml/2.2"> 
    <xsl:template match="/"> 
    <xsl:for-each select="kml:kml/kml:Document/kml:Placemark"> 
    <name><xsl:value-of disable-output-escaping="yes" select="kml:name"/></name> 
    <description><xsl:value-of disable-output-escaping="yes" select="kml:description"/></description> 
    </xsl:for-each> 
</xsl:template> 

それぞれの名前と説明タグは、しかし、これを含んでいる:のxmlns:KML = "http://www.opengis.net/kml/2.2" 私はちょうどかかわらず、Accessクエリであることを連結することができますが。私はAccessにインポートしようとするとエラーが発生します。私は多くの名前と説明タグしか持っていないので、私はルートフォルダが必要だと言います。 XSLを使用してタグを追加する方法はありますか?どうもありがとうございました。私が編集を続けているという不吉な質問を申し訳ありません。あなたのXMLでXPath 1.0では、デフォルトの名前空間

<kml xmlns="http://www.opengis.net/kml/2.2" ... 

があるので

+0

私は、問題は名前空間宣言であると思います。この問題の解決策はまだありませんが、ループを "kml/Document/Placemark"に変更して、要素から名前空間宣言を削除した場合、それはうまくいきます。 –

答えて

2

ティム・Cは、名前空間に関する正しいですが、私XSLTは宣言型言語なので、通常はスタイルシートのfor-eachを参照すると、言語に合ったものに置き換えることができます。だから私は次のコードを使用します。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:kml="http://www.opengis.net/kml/2.2"> 
    <xsl:output method="text"/> 

    <xsl:template match="/"> 
     <xsl:apply-templates select="kml:kml/kml:Document/kml:Placemark"/> 
    </xsl:template> 

    <xsl:template match="kml:Placemark"> 
     <xsl:value-of select="kml:name"/> 
     <xsl:value-of select="kml:description"/> 
    </xsl:template> 

</xsl:stylesheet> 
+0

ありがとうございました。変換されたXMLをAccessにインポートしようとしていますが、機能していません。間違った構文エラーが発生しています。新しく変換されたXMLは、長いコード行の1つです: .... タグを新しいXMLに保存する方法はありますか? AccessでTransformXMLメソッドを使用して、名前と説明のみを抽出しようとしています。元のKMLファイルにたくさんの余分なコードが含まれているためです。ありがとうございました。私はそれが理にかなったことを願う – Andrew

+0

出力メソッドをxmlに変更してから、 BeWarned

+0

こんにちは、ご協力いただきありがとうございます。私が使用できるソリューションを掲載しました。 XSLにルートフォルダを追加する簡単な方法はありますか?または、XSLにルートタグを保持させるだけですか? :あなたはちょうどあなたがしたいタグに名前と説明を囲む – Andrew

2

これは、あなたが使用する各名前空間の接頭辞を指定する必要があります。 ドキュメント/目印のようなパスは、名前空間に目印要素のみを選択します。

<xsl:template match="/">をやってする文書KMLのルート要素と同じものではありません文書要素を、一致していることも

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:kml="http://www.opengis.net/kml/2.2"> 
    <xsl:template match="/"> 
     <xsl:for-each select="kml:kml/kml:Document/kml:Placemark"> 
     <xsl:value-of select="kml:name"/> 
     <xsl:value-of select="kml:description"/> 
     </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 

このXSLTをないようにしてください。ここで

は、デフォルトの名前空間についての良い記事です:あなたは、この操作が必要になりますhttp://www.jenitennison.com/blog/node/36

注意、説明の出力にCDATA

<xsl:value-of select="kml:description" disable-output-escaping="yes"/> 
0

そのは自分がKMLCSVコンバータをお勧めします私を扱うKMLにを目印場合。 (http://sourceforge.net/projects/kmlcsv/)

ただし、線やポリゴンでは機能しません。

おかげ

シェーン

関連する問題