1

親愛なる xml-friends さん、こんにちは。

私は xml を初めて使用するので、質問に答えないでください... 私は現在、xslt プロセッサを使用していくつかのテストを行っています - 1 つのテスト データセットで適切に実行されるスクリプトを取得しました - 良好で有効な結果を返しますそして、この動作に反して、同じスクリプトを実行すると、ばかげた愚かな結果が返されます-注:タブストップのみを含む2 MBのcsv形式のファイルが返されます...面白いが本当です...

ここに私のスクリプトは次のとおりです。

次のテストデータセットでこの xslt-code を実行すると、悪い悪い結果しか得られません-タブストップのみ...それ以上はありません...このエラーの原因は何ですか。注-2番目のデータセットに対してコードを実行すると、より良い結果が得られます.-以下を参照してください...そして、この最初の投稿の最後に結果を参照してください....

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output method="text" encoding="utf-8" />

    <xsl:template match="/">
        <xsl:apply-templates />
    </xsl:template>

    <xsl:template match="osm">
        <xsl:apply-templates />
    </xsl:template>

    <xsl:template match="node[tag[@k='amenity' and @v='restaurant']]">
        <xsl:value-of select="./@id"/>
        <xsl:text>&#x09;</xsl:text>
        <xsl:value-of select="./@lat"/>
        <xsl:text>&#x09;</xsl:text>
        <xsl:value-of select="./@lon"/>
        <xsl:text>&#x09;</xsl:text>
        <xsl:value-of select="./tag[@k = 'cuisine']/@v"/>
        <xsl:text>&#x09;</xsl:text>
        <xsl:value-of select="./tag[@k = 'name']/@v"/>
        <xsl:text>&#x09;</xsl:text>
        <xsl:value-of select="./tag[@k = 'wheelchair']/@v"/>
        <xsl:text>&#x09;</xsl:text>
        <xsl:value-of select="./tag[@k = 'website']/@v"/>
        <xsl:text>&#x09;</xsl:text>
        <xsl:value-of select="./tag[@k = 'addr:country']/@v"/>
        <xsl:text>&#x09;</xsl:text>
    <xsl:value-of select="./tag[@k = 'addr:city']/@v"/>
    <xsl:text>&#x09;</xsl:text>        
        <xsl:value-of select="./tag[@k = 'addr:street']/@v"/>
        <xsl:text>&#x09;</xsl:text>
        <xsl:value-of select="./tag[@k = 'addr:housenumber']/@v"/>
        <xsl:text>&#x0A;</xsl:text>
    </xsl:template>
        <!-- all non-restaurant nodes -->
    <xsl:template match="node[tag[@k='amenity' and @v!='restaurant']]" />

</xsl:stylesheet>

このテストデータセットに対してこれを実行すると、タブストップのみを含むファイルのダム結果のみが得られます。接着剤がありません。エラーの原因は何ですか?

<node id="25242198" lat="49.0077605" lon="8.3560676" version="9" changeset="10151199" user="keinname" uid="165061" timestamp="2011-12-18T22:59:43Z">
    <tag k="addr:city" v="Karlsruhe" />
    <tag k="addr:country" v="DE" />
    <tag k="addr:housenumber" v="6" />
    <tag k="addr:postcode" v="76185" />
    <tag k="addr:street" v="Durmersheimer Straße" />
    <tag k="amenity" v="restaurant" />
    <tag k="beer_garden" v="yes" />
    <tag k="cuisine" v="german" />
    <tag k="name" v="Beim Schupi" />
    <tag k="opening_hours" v="Mo-Sa 17:00+; Su 12:00+" />
    <tag k="phone" v="+49 721 551220" />
    <tag k="website" v="http://www.schupi.de" />
</node>

[...]...

注:ばかげた悪い結果が返されます-タブストップのみで、それ以上のものはありません..

しかし、上記の xslt-processor-code を次の xml-dataset で実行すると、良い結果が得られます...以下を参照してください-!!!

<?xml version='1.0' encoding='UTF-8'?>
<osm version="0.6" generator="Osmosis SNAPSHOT-r26564">
  <node id="185612117" version="5" timestamp="2011-01-08T19:23:43Z" uid="290680" user="wheelmap_visitor" changeset="6906586" lat="48.8037523" lon="9.5248779">
    <tag k="addr:postcode" v="73614"/>
    <tag k="wheelchair" v="yes"/>
    <tag k="website" v="http://www.courage-restaurant.de/"/>
    <tag k="addr:country" v="DE"/>
    <tag k="name" v="Courage"/>
    <tag k="amenity" v="restaurant"/>
    <tag k="addr:street" v="Künkelinstraße"/>
    <tag k="addr:city" v="Schorndorf"/>
    <tag k="addr:housenumber" v="33"/>
  </node>
  <node id="252619189" version="5" timestamp="2011-01-08T19:21:43Z" uid="290680" user="wheelmap_visitor" changeset="6906586" lat="48.8067032" lon="9.5314986">
    <tag k="addr:postcode" v="73614"/>
    <tag k="wheelchair" v="yes"/>
    <tag k="website" v="www.kesselhaus-schorndorf.de"/>
    <tag k="addr:country" v="DE"/>
    <tag k="name" v="Kesselhaus"/>
    <tag k="amenity" v="restaurant"/>
    <tag k="addr:street" v="Arnoldstraße"/>
    <tag k="addr:city" v="Schorndorf"/>
    <tag k="addr:housenumber" v="3"/>
  </node>
  <node id="319597380" version="1" timestamp="2008-12-17T21:13:15Z" changeset="444629" lat="48.8277913" lon="9.5477029">
    <tag k="name" v="Gasthaus zur Linde"/>
    <tag k="amenity" v="restaurant"/>
  </node>
  <node id="319597382" version="1" timestamp="2008-12-17T21:13:15Z" changeset="444629" lat="48.8282523" lon="9.5503109">
    <tag k="name" v="China-Garden"/>
    <tag k="amenity" v="restaurant"/>
  </node>
  <node id="339591124" version="2" timestamp="2011-09-22T17:33:36Z" uid="290680" user="wheelmap_visitor" changeset="9366746" lat="48.7888015" lon="9.5079525">
    <tag k="cuisine" v="italian"/>
    <tag k="wheelchair" v="limited"/>
    <tag k="name" v="Pizzeria da Rocco"/>
    <tag k="amenity" v="restaurant"/>
  </node>
  <node id="392682646" version="3" timestamp="2010-05-11T19:00:20Z" uid="12973" user="MattGPS" changeset="4671372" lat="48.8315734" lon="9.5468864">
    <tag k="name" v="Gasthaus an der Wieslauf"/>
    <tag k="amenity" v="restaurant"/>
  </node>
  <node id="454516720" version="4" timestamp="2010-12-11T15:30:21Z" uid="12982" user="Michael Schulze" changeset="6625571" lat="48.8031264" lon="9.5344371">
    <tag k="addr:postcode" v="73614"/>
    <tag k="cuisine" v="regional"/>
    <tag k="website" v="http://www.deutscheshaus-schorndorf.de/"/>
    <tag k="addr:country" v="DE"/>
    <tag k="name" v="Deutsches Haus"/>
    <tag k="amenity" v="restaurant"/>
    <tag k="addr:street" v="Sonnenscheinstraße"/>
    <tag k="addr:city" v="Schorndorf"/>
    <tag k="addr:housenumber" v="13"/>
  </node>
  <node id="572362430" version="3" timestamp="2010-07-04T06:59:50Z" uid="106522" user="neuntoeter" changeset="5130101" lat="48.807953" lon="9.5379673">
    <tag k="smoking" v="no"/>
    <tag k="name" v="Club Kneipe"/>
    <tag k="amenity" v="restaurant"/>
  </node>
  <node id="613988559" version="1" timestamp="2010-01-15T01:20:03Z" uid="24748" user="mabapla" changeset="3621550" lat="48.7991827" lon="9.551828">
    <tag k="name" v="Gaststätte Schützenhaus"/>
    <tag k="amenity" v="restaurant"/>
  </node>
  <node id="859532091" version="1" timestamp="2010-08-13T23:05:14Z" uid="130472" user="fx99" changeset="5486736" lat="48.8062337" lon="9.5278548">
    <tag k="website" v="http://www.weinstube-buechsenmacher.de/"/>
    <tag k="name" v="Weinstube zum Büchsenmacher"/>
    <tag k="amenity" v="restaurant"/>
    <tag k="addr:housename" v="5"/>
    <tag k="addr:street" v="Höllgasse"/>
  </node>
  <node id="1625565012" version="1" timestamp="2012-02-09T18:00:04Z" uid="131968" user="changchun_1" changeset="10636279" lat="48.8151893" lon="9.5310692">
    <tag k="name" v="Gasthaus Sonne"/>
    <tag k="amenity" v="restaurant"/>
  </node>
</osm>

-かなり良いを参照してください!! - 2 番目のデータセットで xslt-processor を実行したときに得られる結果: 接着剤がありません。なぜこのような厄介な結果が得られるのか - 最初のデータセットで xslt-processor を適用すると...!?

185612117   48.8037523  9.5248779       Courage yes http://www.courage-restaurant.de/   DE  Schorndorf  Künkelinstraße  33

252619189   48.8067032  9.5314986       Kesselhaus  yes www.kesselhaus-schorndorf.de    DE  Schorndorf  Arnoldstraße    3

319597380   48.8277913  9.5477029       Gasthaus zur Linde                      

319597382   48.8282523  9.5503109       China-Garden                        

339591124   48.7888015  9.5079525   italian Pizzeria da Rocco   limited                 

392682646   48.8315734  9.5468864       Gasthaus an der Wieslauf                        

454516720   48.8031264  9.5344371   regional    Deutsches Haus      http://www.deutscheshaus-schorndorf.de/ DE  Schorndorf  Sonnenscheinstraße  13

解決策へのアイデアとポインタは大歓迎です... thx事前に!!

4

1 に答える 1

1

良い結果が得られます。ケース 2 では 11 行、ケース 1 では 1 行です。

25242198    49.0077605  8.3560676   german  Beim Schupi     http://www.schupi.de    DE  Karlsruhe   Durmersheimer Straße   6

これはまさに私が期待するものです。
xslt プロセッサがテンプレート化された xslt シートで失敗するのは、複数のレコードでは正常に機能しているのに 1 つのレコードしか存在しない場合です。

別の方法を試してみることをお勧めします。それでも問題が解決しない場合は、使用している xslt プロセッサをお知らせください。

于 2012-04-22T10:19:02.257 に答える