我被这个问题困住了:我正在使用R。我想删除父节点“uid”、“seanceRef”和“sessionRef”。
我用remove_node()
试过了,但看起来确实有效。我该怎么做呢?
<?xml version='1.0' encoding='UTF-8'?>
<compteRendu xmlns="http://schemas.assemblee-nationale.fr/referentiel">
<uid>CRSANR5L16S2022E1N003</uid>
<seanceRef>RUANR5L16S2022IDS26199</seanceRef>
<sessionRef>SCR5A2022E1</sessionRef>
<metadonnees>
I want to keep metadonnees
</metadonnees>
</compteRendu>
2条答案
按热度按时间xbp102n01#
您没有在xpath中包含xml命名空间前缀。
如果我们查看您的原始文档:
然后我们看到第二行定义了xml命名空间,所有属于这个命名空间的节点都必须通过它们的命名空间前缀来引用,否则它们将找不到:
默认的前缀是
d1
,但是我们可以通过以下操作来检查它是什么:因此,我们可以通过执行以下操作获得所需的节点:
要删除此节点,可以执行以下操作:
根据您的用例,您可能会发现从XML中完全剥离名称空间以使XPath更易于使用更容易:
bf1o4zei2#
对于OP或未来的读者,还可以考虑XSLT,这是一种专用语言,设计用于转换XML文件,特别是当删除节点的逻辑变得复杂和有条件时。可以使用
xslt
包(xml2)
的姊妹包)运行XSLT 1.0脚本。XSLT是一种行业语言,因此可以移植到其他语言(Java、Python、PHP)和executables。具体来说,运行Identity Transform模板来复制XML,然后在要删除的节点上写入一个空模板。当然,使用临时前缀来重新Map默认名称空间以引用要删除的节点。