xmlstarlet如何指定特定的类

时间:2016-04-06 15:38:38

标签: xmlstarlet

此代码成功使以下两行的enabled =“false。 如何仅为第二行更改以下内容以使enabled = false?

xmlstarlet ed --inplace --update '//ResultCollector/@enabled' --value 'false' "${scriptLocation}"


 <ResultCollector guiclass="SimpleDataWriter" testclass="ResultCollector" testname="Simple Data Writer" enabled="true">

 <ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree" enabled="true">

1 个答案:

答案 0 :(得分:1)

XPath允许按其父级内容的出现顺序指定特定的xml元素:

--update '//ResultCollector[2]/@enabled'

上面的表达式选择在其父级下面显示为第二个的所有ResultCollector元素进行处理。

更一般地说,您的应用程序可能会通过嵌入信息(例如标记值)而不是按顺序更安全地选择元素:

--update '//ResultCollector[@guiclass="ViewResultsFullVisualizer"]/@enabled'

如果它适合您,则上述表达式选择处理标记为ResultCollectorguiclass的所有ViewResultsFullVisualizer元素。在您的示例中,这也只会导致第二个ResultCollector更新。