Ich möchte wissen, wie ich den Wert eines Knotens mit den folgenden Pfaden erhalten kann:
config/global/resources/default_setup/connection/host
config/global/resources/default_setup/connection/username
config/global/resources/default_setup/connection/password
config/global/resources/default_setup/connection/dbname
aus dem folgenden XML:
<?xml version="1.0"?>
<config>
<global>
<install>
<date><![CDATA[Tue, 11 Dec 2012 12:31:25 +0000]]></date>
</install>
<crypt>
<key><![CDATA[70e75d7969b900b696785f2f81ecb430]]></key>
</crypt>
<disable_local_modules>false</disable_local_modules>
<resources>
<db>
<table_prefix><![CDATA[]]></table_prefix>
</db>
<default_setup>
<connection>
<host><![CDATA[localhost]]></host>
<username><![CDATA[root]]></username>
<password><![CDATA[pass123]]></password>
<dbname><![CDATA[testdb]]></dbname>
<initStatements><![CDATA[SET NAMES utf8]]></initStatements>
<model><![CDATA[mysql4]]></model>
<type><![CDATA[pdo_mysql]]></type>
<pdoType><![CDATA[]]></pdoType>
<active>1</active>
</connection>
</default_setup>
</resources>
<session_save><![CDATA[files]]></session_save>
</global>
<admin>
<routers>
<adminhtml>
<args>
<frontName><![CDATA[admin]]></frontName>
</args>
</adminhtml>
</routers>
</admin>
</config>
Außerdem möchte ich diesen Wert der Variablen zur weiteren Verwendung zuweisen. Lass mich deine Idee wissen.
command-line
text-processing
xml
xmllint
MagePsycho
quelle
quelle
Antworten:
Verwenden von
bash
undxmllint
(wie durch die Tags angegeben):Für den Fall, dass es nur eine XML-Zeichenfolge gibt und die Verwendung einer temporären Datei vermieden werden soll, sind Dateideskriptoren der richtige Weg
xmllint
(der hier/dev/fd/3
als Dateiargument angegeben wird):quelle
Obwohl es bereits viele Antworten gibt, stimme ich zu
xml2
.Mit ein wenig Magie können Sie diese sogar direkt als Variablen setzen:
quelle
Folgendes funktioniert, wenn Sie mit Ihren Testdaten arbeiten:
Dies stellt den Inhalt in Variablen
host
,username
,password
unddbname
.quelle
bash
unterstützt kein XML-Parsing. Sie benötigen entweder ein entsprechendes Tool (xmlstarlet, xsltproc, ein modernes Python usw.) oder Sie können XML nicht korrekt analysieren.Eine reine
bash
Funktion, nur für den unglücklichen Fall, dass Sie nichts Passendes installieren dürfen. Dies kann und wird wahrscheinlich bei komplexerem XML fehlschlagen:Verwendung:
Bekannte Probleme:
quelle
Mit xmllint und der Option --xpath ist dies sehr einfach. Sie können dies einfach tun:
Wenn Sie zum Attribut eines Elements gelangen müssen, ist dies auch mit XPath ganz einfach. Stellen Sie sich vor, Sie haben die Datei:
Die benötigten Shell-Anweisungen wären:
quelle
Sie können die PHP-Befehlszeilenschnittstellen-Codierung in Bash-Skripten verwenden, um mehrere komplexe Skripten zu verarbeiten, die sich tatsächlich über mehrere Codierungszeilen erstrecken. Versuchen Sie zunächst, Ihre Lösung mit PHP-Skripten zu erstellen, und übergeben Sie die Parameter später im CLI-Modus. Auf diese Weise können Sie die hervorragende Verwendung von XML-Parsern steuern.
Die Umgebung scheint, dass Sie PHP im Client-Modus über ssh / shell-Zugriff verwenden können.
Jetzt mache alle Dinge in deiner PHP-Datei. Verwenden Sie die verfügbaren Befehlszeilenparameter.
Sie können diese Rückgabewerte sogar der Shell-Umgebung zuweisen, um den Rest Ihrer Shell-Skripte fortzusetzen.
Die andere Möglichkeit besteht darin, die Option | grep zu verwenden, um den erforderlichen Wert in der XML-Datei zu ermitteln, wenn Sie sich ziemlich sicher sind, dass sich die Struktur Ihrer XML-Datei im Laufe der Zeit nicht ändert.
quelle
Dieser Kommentar verwendet nur sh / bash Befehle und Methoden! /test.xml ist Ihre XML-Typ-Datei bei der ersten Frage ...
Ausgabe:
Wenn Sie diese Werte in eine Datei schreiben möchten, gehen Sie wie folgt vor:
Diese Methode überschreibt Ihre lokalen Dateien, wobei nur Werte abgerufen werden (Ihre Daten gehen aus den Ausgabedateien verloren).
quelle