我有一個非常大的XML文件的一個小的子集 - 這是從地理信息學領域的。我從德國子網站或OpenStreetMap-Project獲得:Geograpical-Engineering-site,它提供某個區域的OpenStreetMap的每週快照:我從這裏獲取germany.osm.bz2 http://ftp5.gwdg.de/pub/misc/openstreetmap/download.geofabrik.de/XSLT處理器還給只請求/匹配的標籤
對於做一些測試與xslt我想運行一個請求找出某個實體 - 讓我們舉例來說餐廳。我們想找出該地區的所有餐館。
現在我們可以在BZ2壓縮文件,直接運行,我們下載的 - 例如,如果我們使用下面的代碼:
bzcat germany.osm.bz2 | xsltproc restaurants.xslt - > restaurants,csv
以及我與分裂的xml_split文件哪位是一個偉大的perl-來自CPAN的模塊。
問題:與下面的xslt處理器我只得到不好的結果 - 解析的文件werent沒有足夠的分析我只有一小部分信息時,我運行在xml文件上的代碼。看到xslt處理器 - 下面 - 一個litte數據塊出我的文件運行和解析,如果你想檢查它 - 只是得到小數據集 - 注意這是一個拆分文件
在這裏你可以得到它:https://rapidshare.com/#!download|643p12|2523227518|germany-001.xml|100000
注:參見因此,重要線路:xmlns:xml_split="http://xmltwig.com/xml_split"
而這一次在這裏:
<xsl:for-each select="xml_split:root/node/tag[@k='amenity' and @v='restaurant']">
注意 - 你可以運行一個小測試 - 看看需要多長時間來解析 時間在xsltproc restaurants.xslt德國Y型001.xml>餐館 - 001.csv
real 0m0.308s
user 0m0.283s
sys 0m0.022s
這裏我們有XSLT處理器包含代碼解析 - (稱爲atest3.xslt )
<xsl:stylesheet version = '1.0'
xmlns="http://www.w3.org/1999/xhtml"
xmlns:xml_split="http://xmltwig.com/xml_split"
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:output method="text" encoding="UTF-8"/>
<xsl:template match="/">
<xsl:for-each select="xml_split:root/node/tag[@k='amenity' and @v='restaurant']">
<xsl:value-of select="../@id"/>
<xsl:text>	</xsl:text>
<xsl:value-of select="../@lat"/>
<xsl:text>	</xsl:text>
<xsl:value-of select="../@lon"/>
<xsl:text>	</xsl:text>
<xsl:for-each select="../tag[@k='name']">
<xsl:value-of select="@v"/>
</xsl:for-each>
<xsl:text>
</xsl:text>
<xsl:value-of select="./tag[@k = 'cuisine']/@v"/>
<xsl:text>	</xsl:text>
<xsl:value-of select="./tag[@k = 'wheelchair']/@v"/>
<xsl:text>	</xsl:text>
<xsl:value-of select="./tag[@k = 'website']/@v"/>
<xsl:text>	</xsl:text>
<xsl:value-of select="./tag[@k = 'addr:country']/@v"/>
<xsl:text>	</xsl:text>
<xsl:value-of select="./tag[@k = 'addr:city']/@v"/>
<xsl:text>	</xsl:text>
<xsl:value-of select="./tag[@k = 'addr:street']/@v"/>
<xsl:text>	</xsl:text>
<xsl:value-of select="./tag[@k = 'addr:housenumber']/@v"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
,在這裏我們下面有一個數據塊從XML文件中,我們已經解析:看到它
<node id="52768810" lat="48.2044749" lon="11.3249434" version="7" changeset="9490517" user="wheelmap_visitor" uid="290680" timestamp="2011-10-07T20:24:46Z">
<tag k="addr:city" v="Olching" />
<tag k="addr:country" v="DE" />
<tag k="addr:housenumber" v="72" />
<tag k="addr:postcode" v="82140" />
<tag k="addr:street" v="Hauptstraße" />
<tag k="amenity" v="restaurant" />
<tag k="cuisine" v="mexican" />
<tag k="email" v="[email protected]" />
<tag k="name" v="La Cantina" />
<tag k="opening_hours" v="Mo-Su 17:00-01:00" />
<tag k="phone" v="+49 (8142) 444393" />
<tag k="website" v="http://www.cantina-olching.com/" />
<tag k="wheelchair" v="no" />
</node>
看到的結果 - 注意,少了一些部件 - 不幸的是..
51923772 49.0812534 8.5637183 Zur Talschänke
52040576 49.4635433 12.4287292 Emil-Kemmer-Haus
52141326 49.4144243 12.4143153 Gasthaus Plecher
52623232 48.9293634 8.2722549 Korfu
52664989 49.0435133 8.3919370 Restaurant Zentrum
52754898 49.3243828 12.3618662 Gasthaus Irlbacher
52762875 49.0099641 8.2528132 Langasthof Stober
52765672 50.0082768 9.2139632 Wirtshaus im Frohnrad
52768810 48.2044749 11.3249434 La Cantina
52768816 48.2051698 11.3257964 Indian Palace
52768826 48.2073264 11.3276147 Dorfstub'n
52768830 48.2075968 11.3281055 Le Candele
52774284 49.0319471 8.2888353 Zum Anker
以及它是有點問題,我得到的結果 - 我嘗試了很多,但此刻我無縫爲什麼我得到了小輸出 - 這是完全相反的標籤我在xslt處理器 - 任何想法和提示將大大升值
btw:畢竟我想運行大約5000個文件,這是分裂的結果 - 隨後我想收集所有結果在mysql數據庫中...
在這裏你可以得到original-file: http://ftp5.gwdg.de/pub/misc/openstreetmap/download.geofabrik.de(germany.osm.bz2 01- Apr-2012 14:51 1。7G)
和這裏分裂之一: https://rapidshare.com/#!download|643p12|2523227518|germany-001.xml|100000
我必須重構男女同校 - 所以這個問題 - 是 - 我怎樣才能得到一個有效的方式使用mysql-結果?
* 更新: * thx到這個線程中的第一個答案我開始重構代碼 - 但仍然缺乏一些更好的結果。我不得不再次嘗試一次。我提出了一些改變 - 我在xslt解析器上做了一個快速的步驟:在重構的第一個試驗中,我得到了一些有趣的結果。但我會再試一次 - 如果我找到錯誤並最終嘗試重構所有xslt文件,我會遍歷所有xslt處理器代碼並仔細查看。 - 任何指針和子問題或代碼片段都非常好。問候你的零
你好親愛的弗朗西斯阿維拉 - 非常感謝提示 - 很高興看到如此巨大的幫助,我儘量按照你的意見。 Greetings – zero 2012-04-23 20:40:37
你提出的很多改變 - 我在xslt解析器上做了一個快速的步驟:在重構的第一個試驗中,我得到了一些有趣的結果。但我會再試一次 - 如果我找到錯誤並最終嘗試重構所有xslt文件,我會遍歷所有xslt處理器代碼並仔細查看。 - 任何指針和子問題或代碼片段都非常好。問候你的零 – zero 2012-04-23 21:07:33
你好弗朗西斯 - 你好@所有 - 可以。給**一些**幫助** **重構**代碼!?這將是一個很大的幫助。多謝 – zero 2012-04-24 06:32:01