2016-11-17 2 views
-1

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.

+0

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. –

Antwort

1

Zur Kasse XPath. XML muss heutzutage nicht mehr manuell analysiert werden;)

Zusätzlich bietet xmllint einen XPath interface an.

+0

Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz zur Verfügung zu stellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. - [Aus Bewertung] (/ review/low-quality-posts/14317243) –

+1

@SebastianLenartowicz IMO der Kern der Antwort ist der Vorschlag, XPath zu verwenden, und es würde auch ohne die Links funktionieren. Sie sind nur Hinweise auf relevante Dokumente. –

+1

Der Autor "fragte sich, ob es einen einfachen Weg gibt, dies in xmllint selbst zu erreichen" und ich denke, XPath, vor allem mit xmllint, ist eine angemessene Antwort auf diese Frage. – infotoni91

Verwandte Themen