シェルを使用してウィジェットconfig.xmlから値を解析しようとしています。私はこの仕事のためにsedを使いたいと思う。 xsltprocよりもsucks lessのものがあれば、私は知りたいです。私はこの例ではシェル内のXMLから属性にアクセスする
以下3210からID属性値の後に:
<?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>
私はそれがJquery's attrのと同じくらい簡単だった希望:var id = $("widget").attr("id");
現在xsltproc
を利用し、このシェルコードは失敗します。
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
/解析できないあなたは、このコマンドを試したことがありますか? 1.0.1では動作しません。 – hendry
私は最初の試行でウィジェットの名前空間を忘れました。あなたは '名前空間'をXMLの値で置き換えなければなりません、Stackoverflowは新しいユーザーが複数のURLを貼り付けることはできません。 –
どのように素晴らしい、それは動作します。 'hendry @ x61シェル$ 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' しかし、そこにスイッチのaboniationがあります。無邪気な!! – hendry