Ich habe folgende xml als Beispiel:xmllint: Wie Kinder mit bestimmtem Text in einer anderen XML zu extrahieren
<Config>
<Version>0</Version>
<Model>My model</Model>
<ParameterList>
<Parameter>
<Name>Device.Modelname</Name>
<Value>XC60</Value>
</Parameter>
<Parameter>
<Name>Device.Size</Name>
<Value>4</Value>
</Parameter>
<Parameter>
<Name>Tyre.Size</Name>
<Value>20</Value>
</Parameter>
<Parameter>
<Name>Tyre.Model</Name>
<Value>WATSU</Value>
</Parameter>
</ParameterList>
</Config>
Hier ist, was ich als neue (separate) XML-Datei erreichen will. Daher möchte ich einige der untergeordneten Elemente mit übereinstimmenden Kriterien extrahieren und eine neue XML-Datei erstellen, die nur diese untergeordneten Elemente enthält.
<Config>
<ParameterList>
<Parameter>
<Name>Device.Size</Name>
<Value>4</Value>
</Parameter>
<Parameter>
<Name>Tyre.Model</Name>
<Value>WATSU</Value>
</Parameter>
</ParameterList>
</Config>
Die Kriterien ist, dass der Name des Kindes muss entweder Device.Size oder Tyre.Model sein.
Ich habe versucht, durch jedes Kind und grepping oder Xarg'ing in den Werten in einem Bash-Skript zu durchlaufen, aber ich frage mich, ob es eine einfache Möglichkeit, dies in xmllint selbst zu erreichen.
Ich würde vorschlagen, mit xslt, erstellen Sie eine Identität transform (Suche SO, sollte mehrere Treffer sein) und dann filtern Sie alle Dinge, die Sie nicht wollen, durch leere Vorlagen, z. Passende 'Version',' Model' sowie die Parameter, die Sie nicht möchten. xsltproc ist ein anderes Programm unterhalb der libxml/xmllint-Suite. –