一次删除属性和匹配的节点

Posted

技术标签:

【中文标题】一次删除属性和匹配的节点【英文标题】:Remove attribute & matched node at once 【发布时间】:2021-11-23 12:39:42 【问题描述】:

我尝试从 xml 中删除 attributechild node 一次,例如:

<xml>
  <node attribute="name">
    <child>name</child>
  </node>
</xml>

达到预期的结果

<xml>
  <node>
  </node>
</xml>

取决于子价值

有可能吗?

【问题讨论】:

【参考方案1】:

你可能可以;尝试使用

xml ed -d '//node[child["name"]]/@attribute'  -d  '//node/child["name"]' file.xml

第一部分删除(-dnode 节点的attribute 属性,该节点本身具有child 子节点和name 文本值;第二个-d 删除“子”节点本身。

【讨论】:

匹配无效。不仅“名称”包含,而且所有“子”节点都被删除了。【参考方案2】:

受 Jack 的启发,这是可行的解决方案:

xml ed -d  '//node[child="name"]/@attribute' -d  '//node/child[contains(text(),"name")]' file.xml

【讨论】:

以上是关于一次删除属性和匹配的节点的主要内容,如果未能解决你的问题,请参考以下文章

模式匹配并删除除最后一次出现的所有行

如何使用 Gremlin 在一次查询中同时获取节点属性和边名?

详解SimpleXML添加_修改_删除_遍历XML节点属性

线性表练习之Example040-删除单链表中数据域绝对值相等节点,仅保留第一次出现的节点而删除其余绝对值相等的节点

知识图谱Neo4j Cypher查询语言详解

shell中变量内容的删除,替代