XML(RDF)中rdau命名空间元素定位失效问题求助
问题原因
- 命名空间重复覆盖:你的
ns字典中先后两次定义了rdau前缀对应的命名空间,后定义的无末尾斜杠的版本http://rdaregistry.info/Elements/u覆盖了先定义的正确版本http://rdaregistry.info/Elements/u/。XML命名空间是严格字符串匹配的,差一个末尾斜杠就会被识别为不同的命名空间,因此你写的rdau:P60327路径无法匹配到实际节点。 - 额外小错误:根命名空间的键拼写错误,你写的是
xlmns,正确应为xmlns,不过这个错误不影响rdau前缀的匹配逻辑。
解决方法
- 清理命名空间字典,删除重复的
rdau声明,保留带末尾斜杠的正确版本,同时修正根命名空间的拼写错误,修正后的ns字典示例如下:
ns = {"xmlns":"http://www.loc.gov/zing/srw/", "agrelon":"https://d-nb.info/standards/elementset/agrelon#", "bflc":"http://id.loc.gov/ontologies/bflc/", "rdau":"http://rdaregistry.info/Elements/u/", "dc":"http://purl.org/dc/elements/1.1/", # 删掉原来重复的rdau声明行,后续其余命名空间保留不变即可 "bibo":"http://purl.org/ontology/bibo/", # ... 剩余命名空间声明保持原样 }
- 修正后重新运行代码即可正常提取rdau前缀下的节点值。
排查技巧(可选)
如果后续遇到类似命名空间匹配问题,可以遍历节点打印完整标签名确认实际命名空间:
for elem in xml.iter(): # 只打印包含目标标签的内容方便定位 if 'P60327' in elem.tag: print(elem.tag)
输出的结果会是{http://rdaregistry.info/Elements/u/}P60327,对比你ns里rdau对应的地址是否和大括号里的完全一致即可快速定位问题。
内容的提问来源于stack exchange,提问作者ssp24
相关产品推荐
相关产品推荐

