Gostaria de saber como posso obter o valor de um nó com os seguintes caminhos:
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
do seguinte 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>
Também quero atribuir esse valor à variável para uso posterior. Deixe-me saber sua ideia.
command-line
text-processing
xml
xmllint
Mago Psico
fonte
fonte
Respostas:
Usando
bash
exmllint
(conforme fornecido pelas tags):Caso exista apenas uma string XML e o uso de um arquivo temporário seja evitado, os descritores de arquivos são o caminho a seguir
xmllint
(que é fornecido/dev/fd/3
como argumento de arquivo aqui):fonte
Embora já existam muitas respostas, eu vou conversar
xml2
.Com um pouco de magia, você pode até definir essas variáveis diretamente:
fonte
O seguinte funciona quando executado nos seus dados de teste:
Isso coloca o conteúdo em variáveis
host
,username
,password
edbname
.fonte
bash
não possui nenhum suporte interno para análise de XML. Você precisa ter uma ferramenta (xmlstarlet, xsltproc, um Python moderno, etc) ou não pode analisar o XML corretamente.Uma
bash
função pura , apenas para o caso lamentável em que você não tem permissão para instalar qualquer coisa apropriada. Isso pode e provavelmente irá falhar em XML mais complicado:Uso:
Problemas conhecidos:
fonte
Você pode usar a codificação da interface de linha de comando php em scripts bash para lidar com vários scripts complexos que realmente se estendem por várias linhas de codificação. Primeiro, tente criar sua solução usando scripts PHP e depois passe os parâmetros usando o modo CLI. Assim, você pode obter controle sobre os excelentes usos dos analisadores XML.
O ambiente parece que você pode usar o PHP no modo cliente via acesso ssh / shell.
Agora, faça todas as coisas dentro do seu arquivo php. Faça uso dos parâmetros da linha de comando que podem ser necessários.
Você pode até atribuir esses valores de retorno ao ambiente Shell para continuar o restante de seus scripts shell.
E a outra maneira é usar a opção | grep para corresponder ao valor necessário no arquivo xml, se você tiver certeza da estrutura do seu arquivo xml que não muda com o tempo.
fonte
Usando xmllint e a opção --xpath , é muito fácil. Você pode simplesmente fazer isso:
Se você precisar acessar o atributo de um elemento, também será fácil usar o XPath. Imagine que você tem o arquivo:
As instruções shell necessárias seriam:
fonte