如何在Python中的文件中找到类似XML的标记中的字符串?

2024-05-18 14:31:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个RDF文档,如下所示:

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
 xmlns:cd="http:xyz.com#">

<rdf:Description rdf:about="http:xyz.com#">
    <cd:algorithmid>DPOT-5ab247867d368</cd:algorithmid>
    <cd:owner>arun</cd:owner>
    <cd:acesskey>ACCESS-5ab247867d370</cd:acesskey>
    <cd:purpose>Research</cd:purpose>
    <cd:metadata>10</cd:metadata>
    <cd:completeness>Partial</cd:completeness>
    <cd:completeness>Yes</cd:completeness>
    <cd:inclusion_1>age</cd:inclusion_1>
    <cd:feature_1>Sex</cd:feature_1>
    <cd:target>Diagnosis</cd:target>
</rdf:Description>

</rdf:RDF> 

从上面的文本中,我需要提取目标(即只提取“cd:target”标签中的值)。所需输出应为“诊断”。我尝试使用XML解析器,但由于树包含“:”,所以它不起作用。有更好的解决办法吗?在

更新:这是我尝试过的,为天真的编码风格感到抱歉。在

^{pr2}$

Tags: comhttptargetcdrdfdescriptionmetadataowner
3条回答

rdf:和{}是名称空间标记。在搜索中,需要用实际的命名空间标识符替换它们,如下所示:

description = content.find('{http://www.w3.org/1999/02/22-rdf-syntax-ns#}Description')
target = description.find("{http:xyz.com#}target")

cd:部分是一个名称空间。它们在XML中非常常见,几乎任何XML解析器都有处理它们的方法。在

否则,如果您只是在查找单个项,而不关心结构,则可以只执行一个简单的字符串搜索并获取<cd:target>和{}之间的所有内容,如下所示:

rdf = '''rdf xml document'''
open_tag = '<cd:target>'
close_tag = '</cd:target>'
start = rdf.find(open_tag)
end = rdf.find(close_tag)
value = rdf[start + len(open_tag):end]

您可以使用^{}模块及其XML parser。在

from bs4 import BeautifulSoup

XML = '''
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
 xmlns:cd="http:xyz.com#">

<rdf:Description rdf:about="http:xyz.com#">
    <cd:algorithmid>DPOT-5ab247867d368</cd:algorithmid>
    <cd:owner>arun</cd:owner>
    <cd:acesskey>ACCESS-5ab247867d370</cd:acesskey>
    <cd:purpose>Research</cd:purpose>
    <cd:metadata>10</cd:metadata>
    <cd:completeness>Partial</cd:completeness>
    <cd:completeness>Yes</cd:completeness>
    <cd:inclusion_1>age</cd:inclusion_1>
    <cd:feature_1>Sex</cd:feature_1>
    <cd:target>Diagnosis</cd:target>
</rdf:Description>

</rdf:RDF>'''

soup = BeautifulSoup(XML, 'xml')

target = soup.find('target').text
print(target)
# Diagnosis

如你所见,它非常容易使用。在

相关问题 更多 >

    热门问题