Je voudrais savoir comment obtenir la valeur d'un nœud avec les chemins suivants:
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
à partir du XML suivant:
<?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>
Je souhaite également attribuer cette valeur à la variable pour une utilisation ultérieure. Faites-moi savoir votre idée.
command-line
text-processing
xml
xmllint
MagePsycho
la source
la source
Réponses:
Utilisation de
bash
etxmllint
(comme indiqué par les balises):Dans le cas où il n'y a qu'une chaîne XML et que l'utilisation d'un fichier temporaire est à éviter, les descripteurs de fichiers sont le chemin à parcourir
xmllint
(qui est donné ici/dev/fd/3
comme argument de fichier):la source
Bien qu'il y ait déjà beaucoup de réponses, je vais y répondre
xml2
.Avec un peu de magie, vous pouvez même les définir directement en tant que variables:
la source
Les éléments suivants fonctionnent lorsqu'ils sont exécutés par rapport à vos données de test:
Cela met le contenu en variables
host
,username
,password
etdbname
.la source
bash
n'a pas de prise en charge intégrée pour l'analyse XML. Vous devez soit avoir un outil qui le fait (xmlstarlet, xsltproc, un Python moderne, etc.), soit vous ne pouvez pas analyser XML correctement.Une
bash
fonction pure , juste pour le cas malheureux où vous n'êtes pas autorisé à installer quoi que ce soit de approprié. Cela peut, et échouera probablement, sur un XML plus compliqué:Usage:
Problèmes connus:
la source
En utilisant xmllint et l' option --xpath , c'est très simple. Vous pouvez simplement faire ceci:
Si vous avez besoin d'accéder à l'attribut d'un élément, c'est aussi simple d'utiliser XPath. Imaginez que vous avez le fichier:
Les instructions shell nécessaires seraient:
la source
Vous pouvez utiliser le codage d'interface de ligne de commande php dans les scripts bash pour gérer plusieurs scripts complexes qui s'étendent sur plusieurs lignes de codage. Tout d'abord, essayez de créer votre solution à l'aide de scripts PHP, puis passez les paramètres en mode CLI. Ainsi, vous pouvez contrôler les superbes utilisations des analyseurs XML.
L'environnement semble que vous pouvez utiliser PHP en mode client via un accès ssh / shell.
Maintenant, faites toutes les choses dans votre fichier php. Utilisez les paramètres de ligne de commande que cela peut prendre.
Vous pouvez même affecter ces valeurs de retour à l'environnement Shell pour continuer le reste de vos scripts shell.
Et l'autre manière consiste à utiliser l'option | grep pour faire correspondre votre valeur requise dans le fichier xml, si vous êtes assez sûr de la structure de votre fichier xml qui ne change pas avec le temps.
la source
Ce commentaire utilise uniquement les commandes et méthodes sh / bash! /test.xml est votre fichier de type XML à la première question ...
production:
si vous voulez écrire ces valeurs dans un fichier, utilisez cette méthode:
cette méthode écrasera vos fichiers locaux utilisés uniquement en obtenant des valeurs (vos données seront perdues des fichiers de sortie)
la source