Я пытаюсь извлечь строку /RDF/Description/id/text()
, которая должна быть someid
ниже. Каков подходящий xpath, чтобы извлечь это, используя lxml python?lxml xpath RDF не работает
<?xml version="1.0" encoding="utf-8"?>
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:em="http://www.mozilla.org/2004/em-rdf#">
<Description about="urn:mozilla:install-manifest">
<em:id>[email protected]</em:id>
<em:version>initial</em:version>
<em:type>2</em:type>
<em:bootstrap>true</em:bootstrap>
<em:unpack>false</em:unpack>
<!-- Firefox -->
<em:targetApplication>
<Description>
<em:id>{someid}</em:id>
<em:minVersion>7.0</em:minVersion>
<em:maxVersion>27.0</em:maxVersion>
</Description>
</em:targetApplication>
<!-- Front End MetaData -->
<!-- must provide default non-localized because It's used as a default on AMO. It's used as a default by the add-on manager, with the possibility of other locales overriding it. Failure to provide a non-localized name will lead to failed upload on AMO. -->
<em:name>l10n</em:name>
<em:description>ff-addon-demo: Shows how to localize restartless add-ons.</em:description>
<em:creator>Noitidart</em:creator>
<!-- start localizing -->
<em:localized>
<Description>
<em:locale>en-GB</em:locale>
<em:name>l10n :: en-GB</em:name>
<em:description>en-GB :: ff-addon-demo: Shows how to localize restartless add-ons. </em:description>
<em:creator>en-GB :: Noitidart</em:creator>
</Description>
</em:localized>
<em:localized>
<Description>
<em:locale>en-US</em:locale>
<em:name>l10n :: en-US</em:name>
<em:description>en-US :: ff-addon-demo: Shows how to localize restartless add-ons. </em:description>
<em:creator>en-US :: Noitidart</em:creator>
</Description>
</em:localized>
</Description>
</RDF>
Я на самом деле пытался все это: "*/*[4]" , "*/*[4]" , "*/*" , "@my:*" , "em:*" , "my:*" , "@*" , "//id" , "//em:id" , "//em" , "//*[text()='USA']" , "{http://www.mozilla.org/2004/em-rdf#}:localized" , "*/*" , "//tag:RDF" , "//*RDF" , "/RDF/Description/em:targetApplication" , "*/localized" , "*/*localized" , "*/*" , "*/*" , "*/*" , "*/*" , "*/*" , "*/*" , "*/http://www.mozilla.org/2004/em-rdf#" , "*/RDF" , "*/*" , "/RDF" , "//RDF" , "/RDF", ".//Description" , "//?xml" , "//about" , "//em" , "//Description" , "/RDF" , "*/*" , "*/Description" , "*/Descriptoin" , "*" , "./?xml" , "?xml" , "//?xml" , "//http://www.w3.org/1999/02/22-rdf-syntax-ns#}RDF" , "http://www.w3.org/1999/02/22-rdf-syntax-ns#}RDF" , "//version" , "//xml" , "//" , "//RDF" , "./version" , "version" , "xml" , "/RDF/Description/*" , "/RDF/Description"
, тратить много времени бесплодно.
Edit: После того, как ниже решения, я нашел хороший справочный документ для этого общего вопроса https://msdn.microsoft.com/en-us/library/ms950779.aspx
Я не мог найти хорошую ссылку на XPath, и кажется, что lxml реализует только подмножество спецификации. Я искал пространство имен xml, для RDF и т. Д., Я просто думаю, что где-то есть ошибка в документации, и я не хотел тратить слишком много времени на эту чрезвычайно простую задачу. – erjoalgo
@erjoalgo 'lxml' имеет [* полную поддержку * XPath версии 1.0] (http://lxml.de/xpathxslt.html). Вы можете прочитать [W3School's] (http://www.w3schools.com/xpath/xpath_syntax.asp) для стартера и ознакомиться с [официальной спецификацией XPath 1.0] (http://www.w3.org/TR/xpath/) для получения полной информации – har07