在一个单独的目录中有一组xml文档,每个文档都是这样的:

    <xmldoc>
      <data>data text</data>
      <parent>
        <descendent1>
          <descendent2>motorcyclebaby.com?query</descendent2>
        </descendent1>
      </parent>
    </xmldoc>

我想在所有文档中删除descendent2中包含“motorcycle”的父元素。 到目前为止,我有这个,它适用于单个doc:

   xmlstarlet ed -d "//parent[descendent1/descendent2[contains(text(),'motorcycle')]]" xmldoc.xml

我试过用find来递归删除父元素:

    find . -name 'xmldoc.xml' -print0 | xmlstarlet ed -d "//parent[descendent1/descendent2[contains(text(),'motorcycle')]]" xmldoc.xml

但是'未能加载外部实体“xmldoc.xml”'

还尝试过:

    find . -name "xmldoc.xml" -exec xmlstarlet ed -d "//parent[descendent1/descendent2[contains(text(),'motorcycle')]]" xmldoc.xml {} +

===============>>#1 票数:2 已采纳

弄清楚了!

    find . -iname "xmldoc.xml" -exec xmlstarlet ed --inplace -d "//parent[descendent1/descendent2[contains(text(),'motorcycle')]]" {} +

- 因为我的文档资本化,所以忽略了大小写

// parent [descendent1 / descendent2 [contains ...]需要选择子项包含搜索字符串的整个父元素。

--inplace需要更改实际文档,而不是在终端中打印。

{} +需要-exec来对find列出的每个文档进行更改。

\\ O /

  ask by motorbaby translate from so

未解决问题?本站智能推荐:

1回复

XMLStarlet不会删除元素

目前,我有以下命令行,其中$ f表示文件: 我也尝试过 我正在尝试解析包含不同根元素名称的xml文件,这是其ApexClass下面的示例: 但是,运行脚本后,我在控制台中看到了文件的内容,但文件没有更改。 对我在这里做错的任何想法吗?
1回复

如何列出xmlstarlet中子元素的每个可能的父元素

给定此数据: 如何找出元素elem的每个可能的父元素? 到目前为止,我可以通过以下方式找到使用-m选项的方法: 但是,如何使用带有-v的xpath表达式来做同样的事情? 例如,我只能引用父级的id属性,而不能引用父级元素的名称:
1回复

xmlstarlet删除xml数据供稿中除一个元素外的所有元素

在我的Debian VPS上,我只想保留CategoryName Mobile Phones元素,并删除所有具有Category名称的元素,例如Mobile Accessories Laptops等。总共20个不同的Category Name。 XML文件大小为800 MB。 这是XM
1回复

如何在XMLStarlet中过滤多个属性?

例如,给定: 说我想改变 至 或者它的数量为2,如果我想过滤源和初始类别值,我将如何引用它? 我正在尝试执行以下操作: ...但是这会导致语法错误,如下所示:
2回复

XMLStarlet:每个项目打印一行,同时使用父元素的数据

我有以这种方式格式化的XML数据: 我正在尝试使用xmlstarlet将此数据解析为文本文件(逗号分隔)。 所需的输出如下所示: 我能想到的最好的是: 这给出了这样的结果: 很清楚如何在每个Waveforms中打印一行,但如果我想从其父级中包含time属性,则不
1回复

如何使用xmlstarlet将元素插入xml?

我想在XML输入的某些变体中插入其他元素。 该脚本试图演示输入,并且尝试将代码插入现有XML。 可以看出,修改a.xml得到预期的输出。 但是在b.xml和c.xml ,结果是虚假的。 在b.xml ,更改现有的<c/>并创建<b/>另一个块。 在c.xml ,
6回复

如何使用xmlstarlet在另一个元素下插入新元素?

但是我希望sub是config的子级。 我应该如何更改-i的xpath参数? 奖金:是否可以直接将子级插入属性,甚至将其设置为值? 就像是:
1回复

如何使用XmlStarlet将具有属性的元素插入XML文件?

源XML 宾语 我想在每个<block>使用Linux shell脚本插入<el name="c">0</el>元素: 我可以使用XmlStarlet附加元素: 问题 选择每个没有name属性的<el>元素的
2回复

xmlstarlet:筛选出具有属性的元素

如何筛选出某些类型的元素,这些元素不具有带有魔术值的属性,并保留文档的其余部分? 所有这些都使用xmlstarlet吗? 我要做的是: 和 产量 但这隐藏了我宝贵的<database> tag 。 除了缩进之外 ,这不是问题……并且当<some
1回复

如何将带有XmlStarlet的标记添加到XML文档而不重复

我正在尝试将“Listener”标记添加到我的server.xml tomcat文档中。 但是当我尝试添加它时它会成倍增加。 当我尝试以下操作时,它会放置多个标记,并且添加的属性会附加到每个侦听器标记。 xmlstarlet edit --omit-decl \ --insert "/