1

シェルを使用して Widget config.xmlから値を解析しようとしています。このタスクには sed を使用したいと思います。xsltprocよりも簡単なものがあれば、知りたいです。

この例では、以下のid属性値を使用していconfig.xmlます。

<?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 の 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
4

4 に答える 4

0

変換を行っていない場合、XSLT は必要ありません。値のみを取得する必要がある場合は、XPath を使用します。

Perl の XML::XPath モジュールに付属する xpath プログラムがあります。

シェルから: ID=$(xpath config.xml 'string(/widget/@id)' )

( string() 関数は、id の値のみを取得するためのものです。

/widget/@id 自体は "id=value" を返します)

値に応じて他の出力を生成するだけでよい場合は、すべて xslt で行うことができます。他のスクリプト言語から利用できる他の XPath 実装もあります。私は rhino と Jython の両方から Java の XPath を使用しました。Saxon のコマンド ラインからの XQuery もあります。

于 2009-08-26T02:51:09.253 に答える
0

テンプレートマッチ="ウィジェット"

select value-of="@id"

于 2009-07-16T14:54:41.307 に答える
0

<xsl:template xmlns:wgt="http://www.w3.org/ns/widgets" match="/wgt:widget"> <xsl:select value-of="@id" /> </xsl:テンプレート>

于 2009-07-16T15:44:42.813 に答える