XMLStarlet,XPath-如何根据节点删除属性

问题描述 投票:0回答:1

我正在尝试使用XMLStarlet来转换它(test.xml):

<?xml version="1.0"?>
<root xmlns:doc="http://www.test.com" doc:id="hello">
  <a doc:id="x"/>
  <a doc:id="x"/>
  <c doc:id="x">
    <a doc:id="x"/>
    <a doc:id="x"/>
    <c doc:id="x"/>
  </c>
</root>

为此(删除除doc:id之外的所有节点上的c属性:

<?xml version="1.0"?>
<root xmlns:doc="http://www.test.com" doc:id="hello">
  <a/>
  <b/>
  <c doc:id="hello">
    <a/>
    <b/>
    <c doc:id="hello"/>
  </c>
</root>

我已经尝试过,但是它删除了所有的doc:id属性:

xml ed -N doc="http://www.test.com" -d "//@doc:id[not(self::c)]" test.xml
xml xslt xpath xmlstarlet
1个回答
0
投票

您可以使用两个命令的串联:

  1. 第一个删除()所有不是-d元素的doc:id属性
  2. 命令的第二部分更新[<c>-u元素的所有-d属性的值(doc:id)。

这是命令:

<c>

输出是所需的。

© www.soinside.com 2019 - 2024. All rights reserved.