У меня есть чрезвычайно большой xml-файл, который получен из области геоинформатики. я получил его от немецкого дочернего или OpenStreetMap-проекта: Geograpical-Инжиниринг-сайт, который deilvers еженедельный снимок 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-процессором я получаю только плохие результаты - разобранные файлы не разобраны недостаточно активно использовали статистические достаточно я только получить незначительный набор информаций, когда я запустить код на XML-файл. см. xslt-процессор - и ниже - litt data-chunk из файла, который я запускаю и разбираю, если вы хотите его проверить - просто получите небольшой набор данных - обратите внимание, что это разделенный файл.
здесь вы можете получить его : 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 germany -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-процессоре - любая идея, и намек будет значительно appreciatdd
кстати: ведь я хочу работать ки 5000 файлы, которые являются результатом раскола - и впоследствии я хочу собрать все результаты в MySQL-базе данных ...
здесь вы можете получить исходный файл: http://ftp5.gwdg.de/pub/misc/openstreetmap/download.geofabrik.de (germany.osm.bz2 01-A pr-2012 14:51 1.7G)
и здесь расщепляется одно: https://rapidshare.com/#!download|643p12|2523227518|germany-001.xml|100000
я должен реорганизовать студентке -так вопрос - это - как я могу получить MySQL-результаты на эффективный способ?
* обновление: * thx к первому ответу в этой теме i startet для рефакторинга кода, но все же отсутствие некоторых лучших результатов. я должен повторить его снова. Было предложено много изменений - я сделал быстрый проезд в синтаксическом анализаторе xslt: с первым испытанием по рефакторингу я получил некоторые смешные результаты. Но я попробую еще раз - я прохожу через весь код xslt-processor и смотрю ближе, если найду ошибки и, наконец, попытаюсь реорганизовать весь файл xslt. - любые указатели и субэлементы или фрагменты кода очень полезны. Приветствует ваш нулевой
привет уважаемый Фрэнсис Авила - большое спасибо за подсказки - это здорово видеть такую большую помощь, я стараюсь следовать всем вашим советам. Приветствую – zero
много изменений, которые вы предлагаете - я сделал быстрый прохождение на xslt-parser: с первым испытанием по рефакторингу я получил некоторые смешные результаты. Но я попробую еще раз - я прохожу через весь код xslt-processor и смотрю ближе, если найду ошибки и, наконец, попытаюсь реорганизовать весь файл xslt. - любые указатели и субэлементы или фрагменты кода очень полезны. Приветствую ваш ноль – zero
привет Фрэнсис - привет @ все - может у. дайте мне немного ** помогая рукой ** в ** рефакторинг ** код !? Это будет большой помощью. Большое спасибо – zero