Xmlstarlet选择字符串+数字进行更新

时间:2018-08-22 10:22:37

标签: regex xml linux xpath xmlstarlet

我想用一些动态名称更新xml文件中的一个元素。 名称(paraName)始终是GLOBPARA,后跟数字,如以下示例所示。这些是我要更改值的元素。

文件中还填充了一些元素,这些元素也以GLOBPARA开头,但后面没有简单的数字。这些我不想更改的元素。

使用以下命令,我可以更改每个名称中具有GLOBPARA的元素。包括不需要的。     xmlstarlet ed --update“ // globPara [包含(paramName,'GLOBPARA')] / paramValue” -v“ 100” test.xml

问题: 如何仅更改包含字符串(GLOBPARA)和一些随机数字的那些字符?

之前:

FB --> My Server --> Dialogflow
Dialogflow --> My Server --> FB

想要的结果:

<?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>

我用regex d +进行了尝试,但是没有用。

<?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>

1 个答案:

答案 0 :(得分:2)

您可以在XPath下方尝试

<!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <meta http-equiv="X-UA-Compatible" content="ie=edge">
     <title>LIG Boilerplate</title>
     <script src="https://custom-salesforce-domain/externalApps/lightning/lightning.out.js"></script>
     <script>

    let inputVariables = [];
    $Lightning.use("c:SGMVAOutside", function() {
        $Lightning.createComponent("lightning:flow", {},
            "container",
            function (component) {
                component.startFlow("SG_MVA_Triage_Flow_Lightning_Out", inputVariables);
            })
        ;},
        'https://custom-salesforce-domain/externalApps'
    );

</script>
</head>
 <body>
    <p>It works !!!</p>
     <div id='container'>

     </div>

 </body>
 </html>

这将返回//globPara[number(substring-after(paramName, 'GLOBPARA'))>=0]/paramValue 节点的paramValue,其中包含globPara个子节点,其子文本格式为paraName,其中GLOBPARAXXX ANY 正数