带有命名空间的xml的xpath帮助

时间:2014-01-21 05:51:35

标签: xml xpath

如何搜索元素hving field ='field1'(注意 - 命名空间),这是我到目前为止所尝试的...

返回值应该是整个fieldPermissions元素。

/ [local-name()='个人资料'] / [local-name()='fieldPermissions'] / * [。='field1']返回

FIELD1

但我需要父元素(fieldPermissions)。

<?xml version='1.0' encoding='UTF-8'?>
<Profile xmlns='http://soap.sforce.com/2006/04/metadata'>
    <fieldPermissions>
        <editable>false</editable>
        <field>field1</field>
        <readable>true</readable>
    </fieldPermissions>
    <fieldPermissions>
        <editable>false</editable>
        <field>field2</field>
        <readable>true</readable>
    </fieldPermissions>
    <fieldPermissions>
        <editable>false</editable>
        <field>field3</field>
        <readable>false</readable>
    </fieldPermissions>
</Profile>

1 个答案:

答案 0 :(得分:0)

比较元素文本的xpath:

//*[local-name()="field"][text()="field1"]/..

虽然忽略了命名空间,但这个没有(我使用的是python lxml):

>>> print etree.tostring(tree.xpath('//x:field[text()="field1"]/..', 
                                    namespaces={'x': 'http://soap.sforce.com/2006/04/metadata'})[0], 
                         pretty_print=True)
<fieldPermissions xmlns="http://soap.sforce.com/2006/04/metadata">
        <editable>false</editable>
        <field>field1</field>
        <readable>true</readable>
</fieldPermissions>