2016-04-06 8 views
0

Dieser Code macht erfolgreich aktiviert = "false für beide unten Linien. Wie kann ich die folgende Änderung so aktiviert false = nur für die zweite Zeile?xmlstarlet wie kann ich s angeben bestimmte Klasse

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

Antwort

1

XPath erlaubt .

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

der obige Ausdruck all ResultCollector Elemente auswählt, die als zweite unter ihrer Mutter erscheinen für die Verarbeitung

: ein spezifisches XML-Elements von der Reihenfolge ihres Auftretens innerhalb der übergeordneten Angabe

Generell stehen die Chancen, Ihre Anwendung sichere Auswahlelemente durch eine eingebetteten Informationen (wie ein Tag-Wert) statt im Auftrag sein wird:

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

Wenn es Ihnen paßt, der obige Ausdruck wählt alle für die Verarbeitung ResultCollector Elemente, deren Tag guiclassViewResultsFullVisualizer ist. In Ihrem Beispiel bewirkt dies auch, dass nur die zweite ResultCollector aktualisiert wird.

Verwandte Themen