蟒蛇.如何使用libxml2获取属性值

Ste*_*ano 7 python xml get

我使用的是MINIDOM,但它没有提供xpath方法.

我现在正在尝试使用libxml2,但我在检索属性值时遇到问题.

我的xml的摘录如下:

<Class name="myclass1" version="0">
    <Owner user-login="smagnoni"/>
</Class>
Run Code Online (Sandbox Code Playgroud)

我写了以下代码:

import libxml2
doc = libxml2.parseFile(file)
ris = doc.xpathEval('*/Class[@name="'+className+'" and @version="'+classVersion+'"]/Owner')
print str(ris[0])
Run Code Online (Sandbox Code Playgroud)

返回:

<Owner user-login="smagnoni"/>
Run Code Online (Sandbox Code Playgroud)

我如何得到"smagnoni"?用手解析绳子感觉过度劳累.但我没有找到与.getAttribute("attribute-name")minidom 相媲美的方法.

任何人都可以建议正确的方法或指导我文件?

unu*_*tbu 5

.prop('user-login') 应该管用:

import libxml2
import io
content='''\
<Class name="myclass1" version="0">
    <Owner user-login="smagnoni"/>
</Class>
'''
doc = libxml2.parseMemory(content,len(content))
className='myclass1'
classVersion='0'
ris = doc.xpathEval('//Class[@name="'+className+'" and @version="'+classVersion+'"]/Owner')

elt=ris[0]
print(elt.prop('user-login'))
Run Code Online (Sandbox Code Playgroud)

产量

smagnoni
Run Code Online (Sandbox Code Playgroud)


agf*_*agf 4

for owner in ris:
    for property in owner.properties:
        if property.type == 'attribute':
            print property.name
            print property.content
Run Code Online (Sandbox Code Playgroud)

  • 很好...在这种情况下,使用 .prop() 更容易,但因为在其他情况下我可能有多个结果,所以您的 foo 循环可能会有所帮助。Tnx寻求帮助 (2认同)