我在下面有以下XML示例:
<a:p>
<a:r>
<a:rPr lang="en-US" dirty="0"/>
<a:t>Go for a </a:t>
</a:r>
<a:r>
<a:rPr lang="en-US" dirty="0" smtClean="0"/>
<a:t>test-drive</a:t>
</a:r>
<a:r>
<a:rPr lang="de-DE" dirty="0" smtClean="0">
<a:hlinkClick r:id="rId11"/>
</a:rPr>
<a:t>http</a:t>
</a:r>
<a:r>
<a:rPr lang="de-DE" dirty="0">
<a:hlinkClick r:id="rId11"/>
</a:rPr>
<a:t>://</a:t>
</a:r>
<a:r>
<a:rPr lang="de-DE" dirty="0" smtClean="0">
<a:hlinkClick r:id="rId11"/>
</a:rPr>
<a:t>google.com</a:t>
</a:r>
<a:r>
<a:rPr lang="de-DE" dirty="0" smtClean="0"/>
<a:t>.</a:t>
</a:r>
</a:p>
我必须遍历所有a:r
个节点,并从没有子节点text
的节点中获取a:hlinkClick
。例如,输出应该如下所示:
Go for a test drive .
链接必须是exculded
。我在python中完成了以下操作以仅获取link
:
if d.xpath('./a:r/a:rPr[@dirty="0"]/a:hlinkClick[@r:id]', namespaces=NAMESPACES) != []:
e = d.xpath('./a:r/a:rPr/a:hlinkClick/../../a:t/text()', namespaces=NAMESPACES)
print ''.join(e)
但现在我想知道如何才能继续获取文本。任何建议,将不胜感激。感谢
答案 0 :(得分:1)
怎么样?
>>> import re
>>> telems = d.xpath('.//a:r[not(.//a:hlinkClick)]//a:t/text()', namespaces=NAMESPACES)
>>> joined_text = ''.join(telems).strip()
>>> re.sub('\s+', ' ', joined_text)
'Go for a test-drive.'
答案 1 :(得分:0)
如果您有一个xmlObject,您可以迭代该对象并为每个标记获取它的文本和属性。
我正在使用Element Tree,请参阅python文档here