2017-03-14 9 views
1

XPath variablesを使用して、ユーザー定義のタグと一致させ、XPathインジェクションの脆弱性を回避します。私はlxmlのXPath変数

from lxml import etree 
etree.fromstring('<div><p>Hello</p></div>').xpath('.//$var', var='p') 

を試してみましたが、私は私が間違っているのは何

XPathEvalError: Invalid expression 

を取得しますか?

+0

タグ名だけで要素を取得しますか? – Andersson

+0

私のXPath式は上記より複雑です - ツリー内の特定の場所で特定のタグを探したいと思っています。タグ名はあらかじめわかっていません。 – Flash

+0

式でノードを表すために変数を使うことはできないと思います。リテラルQNameでなければなりません。しかし、ワイルドカードと述語を使用することができます。 'etree.fromstring( '

Hello

').xpath( './/* [ローカル名()= $ var]'、var = 'p')'。 – mzjn

答えて

0

式内の位置ステップの一部として変数を使用することはできません。node testそれは文字通りの名前でなければなりません。しかし、ワイルドカードと述語を使用することができます。次の作品:

etree.fromstring('<div><p>Hello</p></div>').xpath('.//*[loca‌​l-name() = $var]', var='p') 
関連する問題