0

名前空間を使用してxmlファイルからxmlノードを選択しようとしています。すでに1つの選択が機能していますが、2番目の選択では機能しません。

これは単純化されたxmlです(PythonコードにBookMetaDataとして保存されています):

<?xml version='1.0' encoding='utf-8'?>
<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="calibre_id">
  <metadata xmlns:opf="http://www.idpf.org/2007/opf" 
  xmlns:dc="http://purl.org/dc/elements/1.1/" 
  xmlns:calibre="http://calibre.kovidgoyal.net/2009/metadata">
    <dc:title>De blanke masai V2</dc:title>
    <meta name="calibre:user_metadata:#origfieldvalue" content="{&quot;is_category&quot;: true, &quot;#extra#&quot;: null}"/>
  </metadata>
</package>

これは私がこれまでに書いたPythonコードです:

#!/usr/bin/python
# All imports
import lxml.html
import lxml.etree

# namespaces
theNamespaces = {'opf' : "http://www.idpf.org/2007/opf", 
'dc' : "http://purl.org/dc/elements/1.1/", 
'calibre' : "http://calibre.kovidgoyal.net/2009/metadata",
'unique-identifier' : "calibre_id" }

# This part is working perfectly
theXMLdoc = lxml.etree.fromstring(BookMetaData)
theElement2 = theXMLdoc.xpath("//dc:title", namespaces = theNamespaces)[0]
print "lxml.html Source Value:"
print( theElement2.text)
print ""


# This part only returns an emtpy list
theOrigValueElement = theXMLdoc.xpath("//meta[@name='calibre:user_metadata:#origfieldvalue']", namespaces = theNamespaces)
print "Original value of OrigFieldValue:"
print( theOrigValueElement)
print ""

私が試したが機能していないもの:
how-to-use-xpath-from-lxml-on-null-namespaced-nodes名前空間 " http://www.idpf.org/2007/opf "は2回使用され、 1回はプレフィックスなしの「パッケージ」に、もう1回はプレフィックス付きの「メタデータ」にあります。したがって、名前空間に別のプレフィックスを追加しても効果はありません。

誰かがこれを手伝ってくれますか?

4

1 に答える 1

1

xpathステートメントにopfプレフィックスを追加するだけの場合

//opf:meta[@name='calibre:user_metadata:#origfieldvalue']

それはトリックをするようです

于 2012-07-19T16:58:16.020 に答える