1
xpathを使用してxmlの要素を検索しようとしています。これは私のコードです:イムfindall
を使用している場合、私はこのエラーを得たlxml findall SyntaxError:無効な述語
<?xml version="1.0" encoding="UTF-8"?>
<model>
<class name="B" kind="abstract">
<inheritance>
<from name="A" privacy="private" />
</inheritance>
<private>
<methods>
<method name="f" type="int" scope="instance">
<from name="A" />
<virtual pure="yes" />
<arguments></arguments>
</method>
</methods>
</private>
<public>
<attributes>
<attribute name="var" type="int" scope="instance">
</attribute>
</attributes>
</public>
</class>
</model>
:
raise SyntaxError("invalid predicate")
SyntaxError: invalid predicate
私はxpath
の代わりfindall
を使用しようとしたsomeStringで
utf8_parser = etree.XMLParser(encoding='utf-8')
root = etree.fromstring(someString.encode('utf-8'), parser=utf8_parser)
somelist = root.findall("model/class[*/attributes/attribute/@name='var']/@name")
XMLは次のようになります。スクリプトはエラーなしで実行されますが、somelist
は空です。私は間違って何をしていますか?
おかげで、。しかし、xpathからモデルを削除せずにそれを行う方法はありませんか?問題は、xmlがどのように見えるのか分からず、xpathの文字列がどのように見えるかわからないことです。今私は手動でxmlとxpathをチェックし、与えられたxmlに従ってxpathがcorrentであることを知る必要があります。 –
@ T.Syk XPathは正しく動作するようにXMLに対応する必要があります。任意のXMLに対して任意のXPathを動作させる方法はありません。他の人からXMLとXPathを受け取った場合は、XPath/XMLの修正を依頼してください。 – har07
@ T.Syk XPathの "モデル"をどうにかしておきたい場合は、ドキュメント要素を参照する '/'軸を使ってXPathを起動することができます: '/ model/class [*/attributes/attribute/@ name = 'var']/@ name' – har07