首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用xmlstarlet编辑XML文件

用xmlstarlet编辑XML文件
EN

Stack Overflow用户
提问于 2022-06-05 13:53:08
回答 1查看 54关注 0票数 1

我想从shell中更改XML文件中的值。我尝试过xmlstarlet,我尝试过不同的代码,但是它没有起作用。

我尝试过/使用过的:

xmlstarlet ed --ps --inplace --update 'core/databus/*/key[@name="SystemName"]/value[@type]/type' -v "test" template.xml

xmlstarlet ed -u core/databus/key_value_mappings/key[@name="SystemName"]/value[@type="value"]/@value -v "test" template.xml

问题:

当我使用这些密码时,没有什么改变。

我想要的:

我想更改值SystemName。例如,到test123的技术发射场。

xml文件

代码语言:javascript
复制
<core>
    <template>
        <!-- General information about the template -->
        <entity name="unit">S7-200</entity>
        <entity name="vendor">Siemens</entity>
        <entity name="description">Rough simulation of a basic Siemens S7-200 CPU with 2 slaves</entity>
        <entity name="protocols">HTTP, MODBUS, s7comm, SNMP</entity>
        <entity name="creator">the conpot team</entity>
    </template>
    <databus>
        <!-- Core value that can be retrieved from the databus by key -->
        <key_value_mappings>
            <key name="FacilityName">
                <value type="value">"Mouser Factory"</value>
            </key>
            <key name="SystemName">
                <value type="value">"Technodrome"</value>
            </key>
            <key name="SystemDescription">
                <value type="value">"Siemens, SIMATIC, S7-200"</value>
            </key>
            <key name="Uptime">
                <value type="function">conpot.emulators.misc.uptime.Uptime</value>
            </key>
            <key name="sysObjectID">
                <value type="value">"0.0"</value>
            </key>
            <key name="sysContact">
                <value type="value">"Siemens AG"</value>
            </key>
            <key name="sysName">
                <value type="value">"CP 443-1 EX40"</value>
            </key>
            <key name="sysLocation">
                <value type="value">"Venus"</value>
            </key>
            <key name="sysServices">
                <value type="value">"72"</value>
            </key>
            <key name="memoryModbusSlave0BlockA">
                <value type="value">[random.randint(0,1) for b in range(0,128)]</value>
            </key>
            <key name="memoryModbusSlave0BlockB">
                <value type="value">[random.randint(0,1) for b in range(0,32)]</value>
            </key>
            <key name="memoryModbusSlave255BlockA">
                <value type="value">[random.randint(0,1) for b in range(0,128)]</value>
            </key>
            <key name="memoryModbusSlave255BlockB">
                <value type="value">[random.randint(0,1) for b in range(0,32)]</value>
            </key>
            <key name="memoryModbusSlave1BlockA">
                <value type="value">[random.randint(0,1) for b in range(0,128)]</value>
            </key>
            <key name="memoryModbusSlave1BlockB">
                <value type="value">[random.randint(0,1) for b in range(0,32)]</value>
            </key>
            <key name="memoryModbusSlave2BlockC">
                <value type="value">[random.randint(0,1) for b in range(0,8)]</value>
            </key>
            <key name="memoryModbusSlave2BlockD">
                <value type="value">[0 for b in range(0,32)]</value>
            </key>
            <key name="Copyright">
                <value type="value">"Original Siemens Equipment"</value>
            </key>
            <key name="s7_id">
                <value type="value">"88111222"</value>
            </key>
            <key name="s7_module_type">
                <value type="value">"IM151-8 PN/DP CPU"</value>
            </key>
            <key name="empty">
                <value type="value">""</value>
            </key>
        </key_value_mappings>
    </databus>
</core>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-05 14:58:21

以第一个XPath表达式为例,您尝试了:它导致一个元素名type,它是具有属性type的元素value的子元素。这样的元素不存在,所以什么都不能更新。

试一试

代码语言:javascript
复制
xmlstarlet ed --ps -u 'core/databus/*/key[@name="SystemName"]/value' -v "test" template.xml

相反,

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72507891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档