Я хотел бы знать, как я могу получить значение узла с помощью следующих путей:
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
из следующего 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>
Также я хочу присвоить это значение переменной для дальнейшего использования. Дайте мне знать вашу идею.
command-line
text-processing
xml
xmllint
MagePsycho
источник
источник
Ответы:
Используя
bash
иxmllint
(как указано в тегах):В случае, если есть только строка XML, и следует избегать использования временного файла, дескрипторы файлов - это путь, по
xmllint
которому следует идти (который задается здесь/dev/fd/3
как аргумент файла):источник
Хотя уже есть много ответов, я перезвоню
xml2
.Приложив немного волшебства, вы даже можете установить их как переменные напрямую:
источник
Следующее работает при запуске с вашими тестовыми данными:
Это ставит содержание в переменные
host
,username
,password
иdbname
.источник
bash
не имеет встроенной поддержки парсинга XML. Вам либо нужен инструмент (xmlstarlet, xsltproc, современный Python и т. Д.), Либо вы не можете правильно проанализировать XML.Чистая
bash
функция, только для неудачного случая, когда вам не разрешено устанавливать что-либо подходящее. Это может и, возможно, не удастся на более сложном XML:Использование:
Известные вопросы:
источник
Используя xmllint и опцию --xpath , это очень просто. Вы можете просто сделать это:
Если вам нужно получить доступ к атрибуту элемента, это также легко сделать с помощью XPath. Представьте, что у вас есть файл:
Необходимые операторы оболочки будут:
источник
Вы можете использовать кодирование интерфейса командной строки php в скриптах bash для обработки нескольких сложных скриптов, которые на самом деле охватывают несколько строк кодирования. Сначала попробуйте создать свое решение с помощью сценариев PHP, а затем передайте параметры в режиме CLI. Таким образом, вы можете получить контроль над превосходным использованием парсеров XML.
Окружение кажется, что вы можете использовать PHP в режиме клиента через доступ по ssh / shell.
Теперь делайте все в вашем php-файле. Используйте параметры командной строки, которые это может принять.
Вы можете даже присвоить эти возвращаемые значения среде Shell, чтобы продолжить остальные сценарии оболочки.
И другой способ - использовать параметр | grep, чтобы соответствовать требуемому значению в файле XML, если вы уверены, что структура вашего файла XML не изменяется с течением времени.
источник
Этот комментарий использует только команды и методы sh / bash! /test.xml - ваш тип файла XML при первом вопросе ...
выход:
если вы хотите записать эти значения в файл, используйте этот метод:
этот метод перезапишет ваши локальные файлы, используемые только для получения значений (ваши данные будут потеряны из выходных файлов)
источник