gpt4 book ai didi

python - 使用 lxml Python 解析非标准 XML 中的 XPath

转载 作者:太空宇宙 更新时间:2023-11-03 19:21:49 29 4
gpt4 key购买 nike

我正在尝试创建一个包含 Google Patents 中所有专利信息的数据库。到目前为止,我的大部分工作都在使用 MattH 在 Python to parse non-standard XML file 中提供的这个非常好的答案。 。我的 Python 太大而无法显示,因此它链接为 here

源文件are here :一堆 xml 文件一起附加到一个具有多个 header 的文件中。问题是在解析这个具有多个 xml 和 dtd 声明的不寻常的“非标准”XML 文件时尝试使用正确的 xpath 表达式。我一直在尝试使用"-".join(doc.xpath在解析时将所有内容连接在一起,但输出会为 <document-id> 创建由连字符分隔的空白和<classification-national>如下图

<references-cited> <citation> 
<patcit num="00001"> <document-id>
<country>US</country>
<doc-number>534632</doc-number>
<kind>A</kind>
<name>Coleman</name>
<date>18950200</date>
</document-id> </patcit>
<category>cited by examiner</category>
<classification-national><country>US</country>
<main-classification>249127</main-classification></classification-national>
</citation>

注意并非每个 <citation> 中都存在所有子级。 ,有时他们根本不存在。

如何在尝试在 <citation> 下的多个条目的每个数据条目之间放置连字符时解析此 xpath ?

最佳答案

从此 XML (references.xml) 中,

<references-cited> 
<citation>
<patcit num="00001">
<document-id>
<country>US</country>
<doc-number>534632</doc-number>
<kind>A</kind>
<name>Coleman</name>
<date>18950200</date>
</document-id>
</patcit>
<category>cited by examiner</category>
<classification-national>
<country>US</country>
<main-classification>249127</main-classification>
</classification-national>
</citation>

<citation>
<patcit num="00002">
<document-id>
<country>US</country>
<doc-number>D28957</doc-number>
<kind>S</kind>
<name>Simon</name>
<date>18980600</date>
</document-id>
</patcit>
<category>cited by other</category>
</citation>
</references-cited>

可以获取 <citation> 每个后代的文本内容其内容如下:

from lxml import etree

doc = etree.parse("references.xml")
cits = doc.xpath('/references-cited/citation')

for c in cits:
descs = c.xpath('.//*')
for d in descs:
if d.text and d.text.strip():
print "%s: %s" %(d.tag, d.text)
print

输出:

country: US
doc-number: 534632
kind: A
name: Coleman
date: 18950200
category: cited by examiner
country: US
main-classification: 249127

country: US
doc-number: D28957
kind: S
name: Simon
date: 18980600
category: cited by other

这种变化:

import sys
from lxml import etree

doc = etree.parse("references.xml")
cits = doc.xpath('/references-cited/citation')

for c in cits:
descs = c.xpath('.//*')
for d in descs:
if d.text and d.text.strip():
sys.stdout.write("-%s" %(d.text))
print

结果如下:

-US-534632-A-Coleman-18950200-cited by examiner-US-249127
-US-D28957-S-Simon-18980600-cited by other

关于python - 使用 lxml Python 解析非标准 XML 中的 XPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9458110/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com