gpt4 book ai didi

xml - 使用 xmlstarlet 替换 XML 中的标记值

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

我正在尝试用 lookup 替换 input.xml 中的值 test。该脚本正在执行且没有任何错误,但它没有替换该值。

sed -i '/<Filter>/,/<\/Filter>/s/test/lookup/' input.xml > input_1.xml

下面是我的 input.xml 文件:

<NikuDataBus
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="./src/webroot/WEB-INF/xog/xsd/nikuxog_entity.xsd">
<Header version="14.2" action="read" objectType="contentPack" externalSource="NIKU"/>
<LookupQuery>
<Filter name="code" criteria="EQUALS">test</Filter>
</LookupQuery>
</NikuDataBus>

最佳答案

使用像 sed 这样的非语法感知工具解析 XML 是个坏主意。如果 XML 格式稍有变化,解决方案就会中断。使用 xmlstarlet这是用于编辑文件的语法感知工具。

由于您的文件在语法上也是有效的,因此解决您的问题非常简单。就这样

xmlstarlet edit --update '//NikuDataBus/LookupQuery/Filter' --value 'lookup' input.xml

要像 sed -i 一样就地编辑文件,请对解决方案使用 -L 标志如果您的版本支持它或使用临时文件 (> temp && mv temp input.xml)

xmlstarlet edit -L --update '//NikuDataBus/LookupQuery/Filter' --value 'lookup' input.xml 

或者,如果 Filter 标签包含 test,您可以更进一步, 替换

xmlstarlet edit --update '//NikuDataBus/LookupQuery/Filter[contains(.,"test")]' --value 'lookup' input.xml

以下版本在 Centos 7 上测试。

$ xmlstarlet --version
compiled against libxml2 2.9.1, linked with 20901
compiled against libxslt 1.1.28, linked with 10128

感谢 Perl 专家的有用评论之一 - Sundeep ,您可以看到可以遍历的路径列表,您可以在这些路径上使用 xmlstarlet

应用操作
$ xmlstarlet el input.xml
NikuDataBus
NikuDataBus/Header
NikuDataBus/LookupQuery
NikuDataBus/LookupQuery/Filter

关于xml - 使用 xmlstarlet 替换 XML 中的标记值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51646972/

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