你好,大家好,亲爱的xml朋友们,
我对xml还不熟悉,所以请不要对我的问题感到厌烦。。。我目前正在使用xslt处理器进行一些测试-
我得到了一个脚本,它在一个测试数据集上运行得很好,并返回了良好有效的结果,与此相反
如果运行相同的脚本,我将返回愚蠢和愚蠢的结果-注意:我将返回一个包含
只有制表符。。。有趣但真实。。。
所以我的剧本是:
如果我在下面的测试数据集上运行此xslt代码,只会得到坏结果-仅限制表符。。。没什么了。。。是什么导致了这个错误。注意-如果我在第二个数据集上运行代码,我会得到更好的结果。-请参阅下面的内容。。。在这篇文章的最后看到结果。。。。

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

如果我在这个测试数据集上运行这个程序,那么我只得到一个只有tabstops的文件。我没有胶水是什么导致的错误?
<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>

[...]...
注意:我得到了愚蠢和糟糕的结果-只有制表符,没有更多。。
但如果我在下面的xml数据集上运行上述xslt处理器代码,我会得到很好的结果。。。见下文-!!!
<?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>

看-相当好!!-当我在第二个数据集上运行xslt处理器时得到的结果:我不明白为什么我会得到如此糟糕的结果-当我在第一个数据集上应用xslt处理器时。。。!?
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

任何解决方案的想法和指针都是非常好的。。。提前通知!!

最佳答案

我得到了很好的结果:案例2中有11行,案例1中有一行:

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

这正是我希望得到的。
对于任何xslt处理程序来说,如果只存在一条记录,而对多条记录工作正常,则模板化的xslt工作表就会失败,这是很奇怪的。
我建议您再看一次,如果仍然失败,请告诉我们您使用的是哪种xslt处理器。

10-05 20:33
查看更多