Давайте попробуем разобрать и извлечь узел из Yahoo Weather RSS.
URL находится здесь http://weather.yahooapis.com/forecastrss?w=12602818&u=c< /а>
Для этой цели необходимо использовать xmlint.
Вот узел для извлечения:
<yweather:condition text="Partly Cloudy" code="30" temp="3" date="Fri, 16 Nov 2014 8:10 am AST" />
Проблема
Наивный xmllint --xpath "//yweather:condition" the_rss_file_from_yahoo
ответил с ошибкой:
XPath error : Undefined namespace prefix
xmlXPathEval: evaluation failed
XPath evaluation failure
Это должно происходить из-за того, что определено пространство имен. Но мы застряли здесь.
Можно ли получить этот узел с помощью xmlint в командной строке? И если да, то как?
Редактировать/Ответить: поскольку вопрос был помечен как дублированный, если вы новичок в XPath, как я, и ищете однострочное решение, вы можете использовать xmllint filename --xpath "//*[local-name()='condition']"
с двумя косыми чертами, противоположными другому вопросу, который использовал один (потому что он обращался к корневому узлу). Однако формальный способ решить эту проблему см. в ответе A) из исходного вопроса и используйте // вместо / в запросе XPath (спасибо, Томалек, за помощь).
xmllint the_rss_file --xpath "/*[local-name()='condition']"
, иxmllint the_rss_file --xpath "/*[namespace-uri()='http://xml.weather.yahoo.com/ns/rss/1.0' and local-name()='condition']"
, и оба ответилиXPath set is empty
- person the_yellow_logo   schedule 05.12.2014xmllint the_rss_file --xpath "//*[local-name()='condition']"
(обратите внимание на двойную косую черту. Возможно, вы также освежите некоторые основы xpath). Но на самом деле это решение неоптимально. Перейти к правильному объявлению URI пространства имен. - person Tomalak   schedule 05.12.2014xmllint --shell the_rss_file
, я набралsetns yweather=http://xml.weather.yahoo.com/ns/rss/1.0
, а затемxpath /yweather:condition
в другой строке и получилObject is a Node Set : Set contains 0 nodes:
. - person the_yellow_logo   schedule 05.12.2014/
соответствует только корневому узлу. - person Tomalak   schedule 05.12.2014