3

たとえば、次の変数があります$myVar

<ResultSet>
    <Row>
        <Cell name="NEXTVAL" type="NUMBER">475535</Cell>
    </Row>
    <Row>
        <Cell name="NEXTVAL" type="NUMBER">475536</Cell>
    </Row>
    <Row>
        <Cell name="NEXTVAL" type="NUMBER">475537</Cell>
    </Row>
</ResultSet>

xslt でこの変数に xpath を使用するにはどうすればよいですか?

どういうわけか値を取得するように/ResultSet/Row[1]/Cell

4

3 に答える 3

2

変数がこのように形成されている場合

<xsl:variable name="myVar" as="element()">
    <ResultSet>
        <Row>
            <Cell name="NEXTVAL" type="NUMBER">475535</Cell>
        </Row>
        <Row>
            <Cell name="NEXTVAL" type="NUMBER">475536</Cell>
        </Row>
        <Row>
            <Cell name="NEXTVAL" type="NUMBER">475537</Cell>
        </Row>
    </ResultSet>
</xsl:variable>

次に、xpathは次のようになります

<xsl:sequence select="$myVar/Row[1]/Cell"/>

変数は ResultSet ノードに「立っている」ため、そのレベルには行ノードしかないため、 $myVar/ResultSet を使用したくありません。変数を要素 (「as」属性) に設定する必要があることに注意してください。名前空間が関連しており、一部の変数のデフォルトの名前空間が他の変数と異なる場合、この xpath 式だけにデフォルトの名前空間を次のように設定できます。

<xsl:sequence select="$myVar/Row[1]/Cell" xpath-default-namespace="http://something.com"/>

スタイルシート全体にデフォルトの名前空間を設定することもできます。名前空間を無視したい場合は、次のように xpath を使用できます

<xsl:sequence select="$myVar/*:Row[1]/*:Cell"/>
于 2012-12-26T10:57:28.217 に答える
0

ここで解決策を見つけました

<xsl:variable name="author">
  <firstname>Jirka</firstname>
  <surname>Kosek</surname>
  <email>jirka@kosek.cz</email>
</xsl:variable>

ここで、$author 変数から電子メール アドレスを抽出するとします。最も明白な方法は、$author/email などの式を使用することです。ただし、「結果ツリー フラグメント」タイプの変数には XPath ナビゲーションを適用できないため、これは失敗します。

この制限を回避したい場合は、結果ツリーのフラグメントをノードセットに変換できる拡張関数を使用できます。この関数は、XSLT または XPath 標準の一部ではありません。したがって、それを使用するスタイルシートは、使用しないスタイルシートほど移植性が高くありません。ただし、 node-set() の利点は通常、移植性の問題を上回ります。

拡張関数は、常に別の名前空間に存在します。それらを使用するには、スタイルシートでこの名前空間を拡張名前空間として宣言する必要があります。node-set() 関数が実装されている名前空間はプロセッサごとに異なりますが、幸いにも多くのプロセッサは EXSLT もサポートしているため、スタイルシートの先頭で次の宣言を使用できます。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:exsl="http://exslt.org/common"
                extension-element-prefixes="exsl"
                version="1.0">
  ...
  <!-- Now we can convert result tree fragment back to node-set -->
  <xsl:value-of select="exsl:node-set($author)/email"/>
  ...
</xsl:stylesheet>
于 2012-12-26T07:46:06.107 に答える
-1

最初の行はテンプレートとして ResultSet と一致します...次の行は行1の 値のみを表示します

'<xsl:template match="//ResultSet">
 <xsl:value-of select="/ResultSet/Row[1]/Cell"/>'

このシングルは、出力として475535も返します。

 '<xsl:value-of select="/ResultSet/Row[1]/Cell"/> '

Xpathについては、 XPATHを参照してください。

これで問題が解決することをお知らせください。

ありがとう、

パヴァン

于 2012-12-26T07:47:08.250 に答える