Saya ingin tahu bagaimana saya bisa mendapatkan nilai simpul dengan jalur berikut:
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
dari XML berikut:
<?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>
Saya juga ingin menetapkan nilai itu ke variabel untuk digunakan lebih lanjut. Biarkan saya tahu ide Anda.
command-line
text-processing
xml
xmllint
MagePsycho
sumber
sumber
Jawaban:
Menggunakan
bash
danxmllint
(seperti yang diberikan oleh tag):Jika hanya ada string XML dan penggunaan file sementara harus dihindari, deskriptor file adalah cara yang harus digunakan
xmllint
(yang diberikan/dev/fd/3
sebagai argumen file di sini):sumber
Meskipun sudah ada banyak jawaban, saya akan berbincang dengan
xml2
.Dengan sedikit sihir, Anda bahkan dapat mengaturnya sebagai variabel secara langsung:
sumber
Hal berikut ini berfungsi saat dijalankan terhadap data pengujian Anda:
Hal ini menempatkan konten ke dalam variabel
host
,username
,password
dandbname
.sumber
bash
tidak memiliki dukungan bawaan untuk penguraian XML. Anda harus memiliki alat yang berfungsi (xmlstarlet, xsltproc, Python modern, dll), atau Anda tidak dapat menguraikan XML dengan benar.bash
Fungsi murni , hanya untuk kasus malang ketika Anda tidak diizinkan untuk menginstal apa pun yang sesuai. Ini mungkin, dan mungkin akan, gagal pada XML yang lebih rumit:Pemakaian:
Masalah Dikenal:
sumber
Menggunakan xmllint dan opsi --xpath , sangat mudah. Anda cukup melakukan ini:
Jika Anda perlu mendapatkan atribut elemen, itu juga mudah menggunakan XPath. Bayangkan Anda memiliki file:
Pernyataan shell yang dibutuhkan adalah:
sumber
Anda dapat menggunakan pengkodean antarmuka baris perintah php dalam skrip bash untuk menangani beberapa skrip kompleks yang sebenarnya menjangkau beberapa baris pengkodean. Pertama, coba buat solusi Anda menggunakan skrip PHP, dan kemudian berikan parameter menggunakan mode CLI. Dengan demikian, Anda bisa mendapatkan kontrol atas penggunaan parser XML yang luar biasa.
Lingkungan sepertinya Anda dapat menggunakan PHP dalam mode klien melalui akses ssh / shell.
Sekarang, lakukan semua hal dalam file php Anda. Manfaatkan parameter baris perintah yang dapat diambil.
Anda bahkan dapat menetapkan bahwa nilai pengembalian ke lingkungan Shell untuk melanjutkan sisa skrip shell Anda.
Dan cara lain adalah dengan menggunakan opsi | grep untuk mencocokkan nilai yang Anda butuhkan dalam file xml, jika Anda cukup yakin dengan struktur file xml Anda yang tidak berubah seiring waktu.
sumber
Komentar ini hanya menggunakan perintah dan metode sh / bash! /test.xml adalah file jenis XML Anda di pertanyaan pertama ...
keluaran:
jika Anda ingin menulis nilai ini ke file, gunakan metode ini:
metode ini akan menimpa file lokal Anda hanya menggunakan nilai (data Anda akan hilang dari file output)
sumber