Xmlstarlet select 用于更新的字符串+数字
Xmlstarlet select String+number for update
我想用一些动态名称更新我的 xml-File 中的一个元素。
名称 (paraName) 始终是 GLOBPARA 后跟一个数字,如下例所示。这些是我要更改值的元素。
该文件还填充了一些元素,这些元素也以 GLOBPARA 开头,但后面没有简单的数字。这些元素我不想改变。
使用以下命令我可以更改名称中包含 GLOBPARA 的每个元素。包括不需要的。
xmlstarlet ed --update "//globPara[contains(paramName, 'GLOBPARA')]/paramValue" -v "100" test.xml
问题:
如何只更改包含字符串 (GLOBPARA) 和一些随机数的那些?
之前:
<?xml version="1.0" encoding="UTF-8"?>
<container>
<dataList>
<globPara>
<paramName>GLOBPARA260</paramName>
<paramValue>0</paramValue>
</globPara>
<globPara>
<paramName>GLOBPARAMON_BAD_TEST_18_1_SGB_IV</paramName>
<paramValue>2555</paramValue>
</globPara>
</dataList>
</container>
想要的结果:
<?xml version="1.0" encoding="UTF-8"?>
<container>
<dataList>
<globPara>
<paramName>GLOBPARA260</paramName>
<paramValue>100</paramValue>
</globPara>
<globPara>
<paramName>GLOBPARAMON_BAD_TEST_18_1_SGB_IV</paramName>
<paramValue>2555</paramValue>
</globPara>
</dataList>
</container>
我用正则表达式 d+ 试过了,但没用。
xmlstarlet ed --update "//globPara[contains(paramName, 'GLOBPARA[\d+]')]/paramValue" -v "100" test.xml
你可以试试下面的 XPath
//globPara[number(substring-after(paramName, 'GLOBPARA'))>=0]/paramValue
这将 return 您 paramValue
的 globPara
节点包含 paraName
子节点,文本格式为 GLOBPARAXXX
,其中 XXX
是 任意正数
我想用一些动态名称更新我的 xml-File 中的一个元素。 名称 (paraName) 始终是 GLOBPARA 后跟一个数字,如下例所示。这些是我要更改值的元素。
该文件还填充了一些元素,这些元素也以 GLOBPARA 开头,但后面没有简单的数字。这些元素我不想改变。
使用以下命令我可以更改名称中包含 GLOBPARA 的每个元素。包括不需要的。 xmlstarlet ed --update "//globPara[contains(paramName, 'GLOBPARA')]/paramValue" -v "100" test.xml
问题: 如何只更改包含字符串 (GLOBPARA) 和一些随机数的那些?
之前:
<?xml version="1.0" encoding="UTF-8"?>
<container>
<dataList>
<globPara>
<paramName>GLOBPARA260</paramName>
<paramValue>0</paramValue>
</globPara>
<globPara>
<paramName>GLOBPARAMON_BAD_TEST_18_1_SGB_IV</paramName>
<paramValue>2555</paramValue>
</globPara>
</dataList>
</container>
想要的结果:
<?xml version="1.0" encoding="UTF-8"?>
<container>
<dataList>
<globPara>
<paramName>GLOBPARA260</paramName>
<paramValue>100</paramValue>
</globPara>
<globPara>
<paramName>GLOBPARAMON_BAD_TEST_18_1_SGB_IV</paramName>
<paramValue>2555</paramValue>
</globPara>
</dataList>
</container>
我用正则表达式 d+ 试过了,但没用。
xmlstarlet ed --update "//globPara[contains(paramName, 'GLOBPARA[\d+]')]/paramValue" -v "100" test.xml
你可以试试下面的 XPath
//globPara[number(substring-after(paramName, 'GLOBPARA'))>=0]/paramValue
这将 return 您 paramValue
的 globPara
节点包含 paraName
子节点,文本格式为 GLOBPARAXXX
,其中 XXX
是 任意正数