J'essaie d'analyser les valeurs d'un widget config.xml en utilisant shell. Je veux utiliser sed pour cette tâche. S'il y a quelque chose que xsltproc, je serais ravi de savoir.Accéder aux attributs de XML dans le shell
Dans cet exemple, je suis après l'id valeur d'attribut du config.xml
ci-dessous:
<?xml version="1.0" encoding="UTF-8"?>
<widget xmlns="http://www.w3.org/ns/widgets" id="http://example.org/exampleWidget" version="2.0 Beta" height="200" width="200">
<name short="123">Foo Widget</name>
</widget>
Je souhaite qu'il était aussi simple que Jquery's attr: var id = $("widget").attr("id");
Actuellement ce code shell en utilisant xsltproc
échoue:
snag() {
TMP=$(tempfile)
cat <<EOF> $TMP
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" encoding="utf-8" indent="no"/>
<xsl:template>
<xsl:value-of select="$1"/>
</xsl:template>
</xsl:stylesheet>
EOF
echo $(xsltproc $TMP config.xml)
rm -f $TMP
}
ID=$(snag "widget/@id")
if test "$ID" = "http://example.org/exampleWidget"
then
echo Mission accomplished.
else
echo "<$ID> is wrong."
fi
Avez-vous essayé cette commande? Cela ne marche pas pour moi sur 1.0.1. – hendry
J'ai oublié l'espace de nom du widget au premier essai. Vous devez remplacer 'namespace' par la valeur de votre xml, Stackoverflow ne permettra pas aux nouveaux utilisateurs de coller plus d'une URL. –
Comme c'est extraordinaire, ça marche. 'hendry @ x61 shell $ xmlstarlet sel -N w =" http://www.w3.org/ns/widgets "-T -t -m"/w: widget/@ id "-v. -n config.xml http: // webvm.net/widgets/123' Cependant il y a une aboniation des commutateurs là. Insensé!! – hendry