Chciałbym wiedzieć, w jaki sposób mogę uzyskać wartość węzła za pomocą następujących ścieżek:
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
z następującego pliku 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>
Chcę też przypisać tę wartość zmiennej do dalszego wykorzystania. Daj mi znać swój pomysł.
command-line
text-processing
xml
xmllint
MagePsycho
źródło
źródło
Odpowiedzi:
Za pomocą
bash
ixmllint
(zgodnie z tagami):W przypadku gdy istnieje tylko ciąg XML i należy unikać korzystania z pliku tymczasowego, deskryptory plików są najlepszym rozwiązaniem
xmllint
(który podano tutaj/dev/fd/3
jako argument pliku):źródło
Chociaż jest już wiele odpowiedzi, włączę się
xml2
.Przy odrobinie magii możesz nawet ustawić je bezpośrednio jako zmienne:
źródło
Następujące działania działają po uruchomieniu danych testowych:
Stawia to zawartość do zmiennych
host
,username
,password
idbname
.źródło
bash
nie ma wbudowanej obsługi parsowania XML. Musisz mieć takie narzędzie (xmlstarlet, xsltproc, nowoczesny Python itp.), Albo nie możesz poprawnie parsować XML.Czysta
bash
funkcja, tylko na niefortunny przypadek, gdy nie możesz zainstalować niczego odpowiedniego. To może i prawdopodobnie zawiedzie w przypadku bardziej skomplikowanego XML:Stosowanie:
Znane problemy:
źródło
Korzystanie z xmllint i opcji --xpath jest bardzo łatwe. Możesz po prostu to zrobić:
Jeśli potrzebujesz dostać się do atrybutu elementu, to także łatwe przy użyciu XPath. Wyobraź sobie, że masz plik:
Potrzebne instrukcje powłoki to:
źródło
Możesz skorzystać z kodowania interfejsu wiersza poleceń php w skryptach bash, aby obsłużyć kilka złożonych skryptów, które faktycznie obejmują wiele wierszy kodowania. Najpierw spróbuj wykonać rozwiązanie za pomocą skryptów PHP, a następnie przekaż parametry za pomocą trybu CLI. W ten sposób można uzyskać kontrolę nad doskonałymi zastosowaniami parserów XML.
Środowisko wydaje się, że możesz używać PHP w trybie klienta poprzez dostęp ssh / shell.
Teraz rób wszystkie rzeczy w swoim pliku php. Skorzystaj z parametrów wiersza poleceń, które można pobrać.
Możesz nawet przypisać te zwracane wartości do środowiska Shell, aby kontynuować resztę skryptów powłoki.
Innym sposobem jest użycie opcji | grep w celu dopasowania wymaganej wartości do pliku xml, jeśli jesteś pewien struktury pliku xml, która nie zmienia się z czasem.
źródło
Ten komentarz używa tylko poleceń i metod sh / bash! /test.xml to plik typu XML na pierwsze pytanie ...
wynik:
jeśli chcesz zapisać te wartości do pliku, użyj tej metody:
ta metoda nadpisze lokalne pliki używane tylko do uzyskania wartości (dane zostaną utracone z plików wyjściowych)
źródło