2016-04-06 4 views
0

Этот код успешно делает Enabled = "ложно для обеих строках ниже. Как можно изменить следующие так включен = ложным только во второй строке?XMLStarlet как я могу указать S конкретный класс

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

XPath позволяет указав конкретный элемент XML по порядку появления внутри своего родителя:.

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

Данное выражение выбирает все элементы ResultCollector, которые появляются в качестве второй под их родителем для обработки

В более общем плане, скорее всего, ваше приложение будет безопаснее Выбор элементов по вложенной информации (например, значение тега), а не по порядку:

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

Если вас это устраивает, то приведенное выше выражение выбирает для обработки всех ResultCollector элементы, чей знак guiclass: ViewResultsFullVisualizer. В вашем примере это также приводит к обновлению только второго ResultCollector.