繁体   English   中英

如何从所有'中提取文本内容<t> ' 使用 xpath 的段落标签内的标签</t>

[英]How to extract text content from all '<t>' tags within paragraph tag using xpath

 <p> <pPr> <pStyle val="Table"/> <rPr> <szCs val="20"/> <rPr> </pPr> <r> <t>Reproductive toxicity</t> </r> <r> <rPr> <szCs val="20"/> </rPr> <t>/pregnancy</t> </r> </p>

我有以下 xml 代码,我需要解析表格中的所有此类 p 标签并使用 lxml python 库中的 XPath 获取其中的文本内容。 我写了以下 XPath,它转到表->第一行->最后一列->然后是我在 html 代码片段中添加的 p 标签):

'//tbl/tr[1]/tc[last()]/p/r/t/text()'

但这将给出一个列表,其中包含 t 标签中的两个字符串作为不同的列表项: ['reproductive toxicity', '/pregnancy']我需要 output 作为一个字符串: ['reproductive toxicity/pregnancy']

谁能建议如何为此编写 XPath ?

这在 XPath 2.0+ 中很容易(在 Saxon/C 产品中可供 Python 用户使用):例如

string-join(//tbl/tr[1]/tc[last()]/p//t, '')

在XPath 1.0中不能直接做; 您必须检索<t>元素集,然后在宿主语言中连接它们的值。

对于 XPath 问题,请始终说出您使用的是哪个版本,因为它通常会影响答案。

由于问题被标记为“lxml”,并且您指出可能有多个p标签具有相似的信息,请在此修改后的带有两个p标签的 xml 上尝试以下操作,让我们看看这是否是您要查找的内容:

repro = """
<doc>
  <p>
  <pPr>
    <pStyle val="Table"/>
    <rPr>
      <szCs val="20"/>
    </rPr>    
  </pPr>
  <r>
    <t>Reproductive toxicity</t>
  </r>
  <r>
    <rPr>
      <szCs val="20"/>
    </rPr>
    <t>/pregnancy</t>
  </r>
</p>
    <p>
  <pPr>
    <pStyle val="Table"/>
    <rPr>
      <szCs val="20"/>
    </rPr>    
  </pPr>
  <r>
    <t>Some other toxicity</t>
  </r>
  <r>
    <rPr>
      <szCs val="20"/>
    </rPr>
    <t>/birth</t>
  </r>
</p>
  </doc>
"""
from lxml import etree
doc = etree.fromstring(repro)
targets = doc.xpath('//p')
lsts = []
for target in targets:
    for t in target:
        txt = target.xpath('.//t/text()')
    lsts.append(txt)
for l in lsts:
    print(' '.join(l))

Output:

Reproductive toxicity /pregnancy
Some other toxicity /birth

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM