我正在尝试解析一个大文件,尤其是英文版本的https://www.wipo.int/ipc/itos4ipc/ITSupport_and_download_area/20200101/MasterFiles/index.html,这是XML格式的专利分类。我是XML解析的新手,所以我认为这就是为什么我很难解析该文件中我真正想要的元素。
让我提供一些背景信息:
<?xml version="1.0" encoding="UTF-8"?>
<IPCScheme xmlns="http://www.wipo.int/classifications/ipc/masterfiles" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" edition="20200101" lang="EN" xsi:schemaLocation="http://www.wipo.int/classifications/ipc/masterfiles ipc_scheme_3-1.xsd">
<ipcEntry kind="s" symbol="A" entryType="K">
<textBody>
<title>
<titlePart>
<text>HUMAN NECESSITIES</text>
</titlePart>
</title>
</textBody>
<ipcEntry kind="t" symbol="A01" endSymbol="A01" entryType="K">
<textBody>
<title>
<titlePart>
<text>AGRICULTURE</text>
</titlePart>
</title>
</textBody>
</ipcEntry>
<ipcEntry kind="c" symbol="A01" entryType="K">
<textBody>
<title>
<titlePart>
<text>AGRICULTURE</text>
</titlePart>
<titlePart>
<text>FORESTRY</text>
</titlePart>
<titlePart>
<text>ANIMAL HUSBANDRY</text>
</titlePart>
<titlePart>
<text>HUNTING</text>
</titlePart>
<titlePart>
<text>TRAPPING</text>
</titlePart>
<titlePart>
<text>FISHING</text>
</titlePart>
</title>
</textBody>
.
.
</ipcEntry>
.
.
</IPCScheme>
您可以假定文件格式正确,每个分支都有完全关闭的位置。大约80万行很长,这就是为什么我不附加此代码示例中的整个文件的原因。
层次结构的简短概述应显示如下:
然后持续到大约H05K0013040000,这是粒度复杂性的最大层。在其中一些中,它会暂停到5级左右,但是未关闭样本的原因是由于这之间的进一步细分。
例如,如果我想提取HUMAN NECESSITIES
或AGRICULTURE
,我想从该专利分类文件中提取文本描述。您可以假定所有这些细分都包含在其中,并且大多数细分在此级别上由该层次结构控制(即<title>
-> <titlePart>
-> <text>
)
lxml
这是我一直在尝试的示例代码:
from lxml import etree
import lxml
tree = etree.parse('EN_ipc_scheme_20200101.xml')
root = tree.getroot()
for elem in root.findall(".//*[@kind='s']"):
body = elem.find('textBody/title/titlePart/text')
print(body)
我的输出是
None
None
None
None
None
None
None
None
这可能有用:)
您显示的XML示例中每个实体的名称空间都在xmlns="http://www.wipo.int/classifications/ipc/masterfiles"
下。您可以通过查看root的子级来查看。