Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用minidom访问元素的子元素?_Python_Xml_Minidom - Fatal编程技术网

Python 如何使用minidom访问元素的子元素?

Python 如何使用minidom访问元素的子元素?,python,xml,minidom,Python,Xml,Minidom,我正在Jupyter笔记本中阅读一个XML/OWL文件(由Protege生成) 我可以读取根元素,但对于子元素,它显示为error/blank from xml.dom.minidom import parse DOMTree = parse("pressman.owl") collection = DOMTree.documentElement if collection.hasAttribute("shelf"): print("R

我正在Jupyter笔记本中阅读一个XML/OWL文件(由Protege生成)

我可以读取根元素,但对于子元素,它显示为error/blank

from xml.dom.minidom import parse

DOMTree = parse("pressman.owl")
collection = DOMTree.documentElement

if collection.hasAttribute("shelf"):
   print("Root element : %s" % collection.getAttribute("owl:ObjectProperty"))

for objectprop in collection.getElementsByTagName("owl:ObjectProperty"):
    if objectprop.hasAttribute("rdf:about"):
            propertytext = objectprop.getAttribute("rdf:about")
            property = propertytext.split('#',2)
            print ("Property: %s" % property[1])
            type = objectprop.getElementsByTagName('rdf:resource')
            print ("Type: %s" % type)
以及
pressman.owl
文件(节略):


输出fis

Property: hasAdvice Type: [] Property: hasDefinition Type: [] Property: hasDiagram Type: [] 物业:hasAdvice 类型:[] 属性:hasDefinition 类型:[] 属性:hasDiagram 类型:[]
你有这个结构

<owl:ObjectProperty rdf:about="urn:absolute:PressmanOntology#hasDefinition">
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
    <rdfs:domain rdf:resource="urn:absolute:PressmanOntology#SEPressman"/>
    <rdfs:range rdf:resource="urn:absolute:PressmanOntology#SEPressman"/>
</owl:ObjectProperty>
这无法工作,因为
rdf:resource
不是元素,而是属性。我想你感兴趣的那个属于
。所以我们需要再往下走一层:

rdf_type = objectprop.getElementsByTagName('rdf:type')
现在,
rdf_type
是一个节点列表——毕竟该方法被称为“按标记名获取元素s”,minidom无法知道在您的情况下可能只有一个
。我们采用第一种,如果存在:

rdf_type = rdf_type[0] if len(rdf_type) > 0 else None
现在,
rdf:resource
是该元素的一个属性。属性是通过minidom中的
.getAttribute()
访问的

理论上,XML中可能缺少
rdf:resource
属性,因此在使用它之前,让我们确保它存在:

if rdf_type is not None and rdf_type.hasAttribute('rdf:resource'):
    rdf_resource = rdf_type.getAttribute('rdf:resource')
else:
    rdf_resource = None

print(rdf_resource)


综上所述,与其手动处理RDF文件,不如查看为RDF编写的库,例如,甚至是专门为OWL编写的库,例如。

不要只包含指向外部资源的链接,例如Google Drive上的共享文件。当链接消失(并且会消失)时,这个问题对于任何未来的访问者来说都是无用的。我已编辑问题以显示代码。供参考:这就是你关于SO的问题应该是什么样子。我还删除了你关于NLP的子问题。这真的是一个完全不同的问题,它非常模糊,没有重点。如果您对此有疑问(理想情况下,它比“我也在尝试NLP,我如何才能做到?”)更具体一些),欢迎您打开一个新的主题。不要错过我答案的最后一分钟编辑,请参阅最后一段。
rdf_type = rdf_type[0] if len(rdf_type) > 0 else None
if rdf_type is not None and rdf_type.hasAttribute('rdf:resource'):
    rdf_resource = rdf_type.getAttribute('rdf:resource')
else:
    rdf_resource = None

print(rdf_resource)