【问题标题】:find and replace in xml file在xml文件中查找和替换
【发布时间】:2014-08-17 20:14:50
【问题描述】:

我想替换 xml 文件中的特定值。

我的测试 XML 如下 -

      <Field Name="ABC" IsArray="false" IsLocked="false">
    <Description>THIS IS FOR ABC VALUE</Description>
    <Comment></Comment>
    <PropertyList>
            <Property Name="ABC" Type="Boolean">
            <DefaultValue>false</DefaultValue>
            </Property>
    </PropertyList>
    <PropertyValueList>
            <PropertyValue PropertyName="ABC">
                    <Value>true</Value>
            </PropertyValue>
    </PropertyValueList>
</Field>

我只想将 PropertyName=ABC 的值从 true 更改为 false

有什么建议吗? sed/awk/perl 什么都可以。

【问题讨论】:

    标签: xml perl awk sed


    【解决方案1】:

    你可以通过 awk 做到这一点,

    awk '/PropertyName=\"ABC\"/{print; getline; sub(/true/,"false")}1' file
    

    【讨论】:

    • @user3780855 要求某人接受答案是可以的,但您应该等待几个小时再接受它,因为它可能会更好。
    • @Jotne 他是新用户。所以我发布了上面的链接。他还提到“这个答案对我有用”。
    • 它不起作用,它删除了&lt;Property Name="ABC" Type="Boolean"&gt; 你需要awk '/PropertyName=\"ABC\"/{print;getline; sub(/true/,"false")}1' 的行。你可以写:如果你喜欢我的回答,但一段时间后你没有找到更好的答案,考虑接受它。
    • @jotne 哦,对不起。把它给忘了。我会按照上面的。
    • 你应该尽量避免使用getline,看看Ed在这里写了什么:awk.freeshell.org/AllAboutGetline你可以这样做:awk '/PropertyName=\"ABC\"/{f=NR} NR=f+1{sub(/true/,"false")}1'
    【解决方案2】:

    你可以使用xmlstarlet:

    xmlstarlet ed -u "/Field/PropertyValueList/PropertyValue/Value/text()" -v "false" test.xml > result.xml
    

    【讨论】:

      猜你喜欢
      • 2019-10-16
      • 1970-01-01
      • 2021-11-06
      • 1970-01-01
      • 2010-12-20
      • 1970-01-01
      • 2017-08-07
      • 1970-01-01
      • 2015-10-06
      相关资源
      最近更新 更多