Al hacer scripts de shell, generalmente los datos estarán en archivos de registros de una sola línea como csv. Es realmente sencillo manejar estos datos con grep
y sed
. Pero tengo que lidiar con XML a menudo, por lo que realmente me gustaría una forma de acceso de script a esos datos XML a través de la línea de comandos. ¿Cuáles son las mejores herramientas?
xml
command-line
scripting
Joseph Holsten
fuente
fuente
Respuestas:
He encontrado que xmlstarlet es bastante bueno en este tipo de cosas.
http://xmlstar.sourceforge.net/
También debería estar disponible en la mayoría de los repositorios de distro. Un tutorial introductorio está aquí:
http://www.ibm.com/developerworks/library/x-starlet.html
fuente
Algunas herramientas prometedoras:
nokogiri : análisis de DOMs HTML / XML en ruby usando selectores XPath y CSS
hpricot : en desuso
fxgrep : utiliza su propia sintaxis similar a XPath para consultar documentos. Escrito en SML, por lo que la instalación puede ser difícil.
LT XML : XML Toolkit derivado de SGML, incluyendo herramientas
sggrep
,sgsort
,xmlnorm
y otros. Utiliza su propia sintaxis de consulta. La documentación es muy formal. Escrito en C. LT XML 2 reclama el soporte de XPath, XInclude y otros estándares W3C.xmlgrep2 : búsqueda simple y potente con XPath. Escrito en Perl usando XML :: LibXML y libxml2.
XQSharp : admite XQuery, la extensión de XPath. Escrito para .NET Framework.
xml-coreutils : kit de herramientas de Laird Breyer equivalente a GNU coreutils. Discutido en un interesante ensayo sobre lo que debe incluir el conjunto de herramientas ideal.
xmldiff : herramienta simple para comparar dos archivos xml.
xmltk : no parece tener un paquete en debian, ubuntu, fedora o macports, no ha tenido un lanzamiento desde 2007 y utiliza la automatización de compilación no portátil.
xml-coreutils parece el mejor documentado y más orientado a UNIX.
fuente
A la excelente lista de Joseph Holsten, agrego el script de línea de comandos xpath que viene con la biblioteca Perl XML :: XPath. Una excelente manera de extraer información de archivos XML:
fuente
-q -e
opciones. Ejemplo, obtenga el valor del atributo "paquete" del nodo "manifiesto" en "AndroidManifest.xml":xpath AndroidManifest.xml 'string(/manifest/@package)' 2> /dev/null
También hay
xml2
y2xml
par. Permitirá que las herramientas habituales de edición de cadenas procesen XML.Ejemplo. q.xml:
xml2 < q.xml
xml2 < q.xml | grep textnode | sed 's!/foo!/bar/baz!' | 2xml
PD También hay
html2
/2html
.fuente
2xml
puede recrear fácilmente XML a partir de resultados parciales (filtrados)xml2
.cat foo.xml | xml2 | grep /bar | 2xml
- te da la misma estructura que el original, pero todos los elementos han sido eliminados excepto los elementos de "barra". Increíble.Puedes usar xmllint:
Debe incluirse con la mayoría de las distribuciones, y también incluye Cygwin.
Ver:
fuente
--xpath
argumento paraxmllint
: manpagez.com/man/1/xmllint--xpath
es una adición bastante reciente y, por ejemplo, no en las versiones de RHEL 6 dexmllint
.xmllint --xpath
se introdujo en libxml2 2.7.7 (en 2010).Si está buscando una solución en Windows, Powershell tiene una funcionalidad incorporada para leer y escribir XML.
test.xml:
Script de Powershell:
testNew.xml:
Fuente: /server/26976/update-xml-from-the-command-line-windows
fuente
xps $doc .root.one
xps $doc 'AppendChild("three")'
yxps $doc '.three.set_InnerText("And don't you forget it!")'
, lo cual es claramente inferior!¡También hay xmlsed y xmlgrep de NetBSD xmltools!
http://blog.huoc.org/xmltools-not-dead.html
fuente
Depende exactamente de lo que quieras hacer.
XSLT puede ser el camino a seguir, pero hay una curva de aprendizaje. Pruebe xsltproc y tenga en cuenta que puede entregar los parámetros.
fuente
También hay una
saxon-lint
línea de comandos con la capacidad de usar XPath 3.0 / XQuery 3.0. (Otras herramientas de línea de comandos usan XPath 1.0).EJEMPLOS
http / html:
xml:
fuente
D. Bohdan mantiene un repositorio de código abierto de GitHub que mantiene una lista de herramientas de línea de comandos para herramientas de texto estructurado, hay una sección para herramientas XML / HTML:
https://github.com/dbohdan/structured-text-tools#xml-html
fuente
XQuery podría ser una buena solución. Es (relativamente) fácil de aprender y es un estándar W3C.
Recomendaría XQSharp para un procesador de línea de comando.
fuente
Primero usé xmlstarlet y todavía lo uso. Cuando la consulta se vuelve difícil, necesito el soporte de las funciones xpath2 y xquery de XML. Me dirijo a xidel http://www.videlibri.de/xidel.html
fuente
Grep equivalente
Puede definir una función bash, digamos "xp" ("xpath") que envuelve algún código python3. Para usarlo necesitas instalar python3 y python-lxml. Beneficios:
Es fácil y poderoso de usar así:
xp () se parece a esto:
Equivalente de Sed
Considere usar xq que le brinda todo el poder del "lenguaje de programación" jq. Si tiene instalado python-pip, puede instalar xq con pip install yq , luego, en el siguiente ejemplo, reemplazaremos "Mantener cuentas" por "Mantener cuentas 2":
fuente
JEdit tiene un complemento llamado "XQuery" que proporciona funcionalidad de consulta para documentos XML.
No es exactamente la línea de comando, ¡pero funciona!
fuente
grep(1)
.