1
path4 = file.xpath('/p:sld/p:cSld/p:spTree/p:sp/p:nvSpPr/p:nvPr/p:ph[@type="body"][@sz="quarter"][@marL=True]', namespaces={'p':'http://schemas.openxmlformats.org/presentationml/2006/main',
            'a':'http://schemas.openxmlformats.org/drawingml/2006/main'})

这是我用于解析的 xml 文件的路径。我正在使用x.hasAttribute('marL') == True:using ElementTree但我不知道如何使用hasAttributeinlxml来检查是否p:ph包含名为marL. 我尝试了上述方法,但效果很好,而且我在 lxml 示例中也没有找到它。任何人都可以建议 lxml 中的功能hasAttribute或用于上述实例的功能是什么?

任何帮助,将不胜感激!!

4

2 回答 2

1

属性存在的 xpath 谓词很简单:[@marL] 因此尝试:

'/p:sld/p:cSld/p:spTree/p:sp/p:nvSpPr/p:nvPr/p:ph[@type="body"][@sz="quarter"][@marL]'

或者:

'/p:sld/p:cSld/p:spTree/p:sp/p:nvSpPr/p:nvPr/p:ph[@type="body" and  @sz="quarter"  and  @marL]'

有关谓词的更多信息,请参见此处的示例。
"employee[@secretary and @assistant]选择上下文节点的所有员工子节点同时具有秘书属性和助理属性"

于 2013-06-03T13:52:28.220 回答
0

尝试

path4 = file.xpath('boolean(/p:sld/p:cSld/p:spTree/p:sp/p:nvSpPr/p:nvPr/p:ph[@type="body"][@sz="quarter"]/@marL)', namespaces={'p':'http://schemas.openxmlformats.org/presentationml/2006/main',
            'a':'http://schemas.openxmlformats.org/drawingml/2006/main'})
于 2013-06-03T13:03:49.220 回答