2017-05-02 4 views
1

I xmlstarlet, für den folgendenxmlstarlet, ändert XMLNodes, da eine Liste der Bezeichner Knoten

Ersatz verwendet habe: xmlstarlet ed -u // Autor [text() = 'Gambardella, Matthew'] -v ' Gambardella‘bookstore.xml, in der folgenden XML-Datei:

<?xml version="1.0"?> 
<catalog> 
    <book id="bk101"> 
     <author>Gambardella, Matthew</author> 
     <title>XML Developer's Guide</title> 
     <genre>Computer</genre> 
     <price>44.95</price> 
     <publish_date>2000-10-01</publish_date> 
     <description>An in-depth look at creating applications 
     with XML.</description> 
    </book> 
    <book id="bk102"> 
     <author>Ralls, Kim</author> 
     <title>Midnight Rain</title> 
     <genre>Fantasy</genre> 
     <price>5.95</price> 
     <publish_date>2000-12-16</publish_date> 
     <description>A former architect battles corporate zombies, 
     an evil sorceress, and her own childhood to become queen 
     of the world.</description> 
    </book> 
    <book id="bk103"> 
     <author>Corets, Eva</author> 
     <title>Maeve Ascendant</title> 
     <genre>Fantasy</genre> 
     <price>5.95</price> 
     <publish_date>2000-11-17</publish_date> 
     <description>After the collapse of a nanotechnology 
     society in England, the young survivors lay the 
     foundation for a new society.</description> 
    </book> 

Wie kann ich anstelle eines Such- und Ersetzungsprozess, setzen speziell auf die Werte, in einer XML-Datei, mit der Buch-ID-Kennung?

Zum Beispiel, für die Buch-ID = "bk101", und für Buch-ID = "bk103" der Autor-Knoten, muss Gambardella werden, egal was es jetzt hat (also suchen und ersetzen wir nicht, aber wir setzen der Wert), für Buch-ID = "bk102" muss der Autor gesetzt werden, um Clems Lebof zu sagen. So bieten wir einige Komma getrennt Buch-ID-Werte und die entsprechenden Werte, die wir brauchen, um eingestellt werden, so dass der Ausgang wird schließlich werden:

<?xml version="1.0"?> 
<catalog> 
    <book id="bk101"> 
     <author>Gambardella</author> 
     <title>XML Developer's Guide</title> 
     <genre>Computer</genre> 
     <price>44.95</price> 
     <publish_date>2000-10-01</publish_date> 
     <description>An in-depth look at creating applications 
     with XML.</description> 
    </book> 
    <book id="bk102"> 
     <author>Clems Lebof</author> 
     <title>Midnight Rain</title> 
     <genre>Fantasy</genre> 
     <price>5.95</price> 
     <publish_date>2000-12-16</publish_date> 
     <description>A former architect battles corporate zombies, 
     an evil sorceress, and her own childhood to become queen 
     of the world.</description> 
    </book> 
    <book id="bk103"> 
     <author>Gambardella</author> 
     <title>Maeve Ascendant</title> 
     <genre>Fantasy</genre> 
     <price>5.95</price> 
     <publish_date>2000-11-17</publish_date> 
     <description>After the collapse of a nanotechnology 
     society in England, the young survivors lay the 
     foundation for a new society.</description> 
    </book> 

Wie könnte die oben erreicht werden, bei der Verwendung von xmlstarlet?

Antwort

0

ändern Sie die XPath author Elemente übereinstimmen, das Kind book ist, wo id Attribut entweder ‚bk101‘ oder ‚bk103‘ gleich:

xmlstarlet ed -u "//book[@id='bk101' or @id='bk103']/author" -v 'Gambardella' bookstore.xml 
+0

und eine Spitze, das für die Herstellung für mehr, aufeinanderfolgende Ersatz? Wie kann ich den obigen Befehl viele Male ausführen, sagen, dass ich 1000 Ersetzungen tun musste, wie im obigen Beispiel? Soll ich ein Bash-Skript erstellen, das aus 1000 Befehlen wie oben besteht? Oder kann ich Eingabedateien für die Buch-IDs und die entsprechenden Autoren ersetzen? – Francis

+0

es ist mein Fehler, @ har07, aber der wichtigste Teil meiner Frage war, wie man die obige Skala machen könnte, zum Beispiel was, wenn der obige Befehl, für einen 1000 Ersatz laufen sollte? Etwas wie wir haben 1000 Gruppen von IDs group1: (@ id = 'bk101' oder @ id = 'bk103' ..) group2 (@ id = 'bk104' oder @ id = 'bk105' ...) und für jeden von den obigen Gruppen ein entsprechender Ersatzwert – Francis

Verwandte Themen