gpt4 book ai didi

xmlstarlet递归地从多个文档中删除父元素

转载 作者:数据小太阳 更新时间:2023-10-29 02:34:44 27 4
gpt4 key购买 nike

在单独的目录中有一组 xml 文档,每个文档如下:

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

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

   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 {} +

最佳答案

想通了!

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

-iname 忽略大小写,因为我的文档是大写的

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

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

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

\o/

关于xmlstarlet递归地从多个文档中删除父元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30279482/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com