3

私は XSLT を初めて使用するので、この質問は少しばかげているかもしれません。誰かがここで何が起こっているのか説明してもらえますか?

簡単な XML ドキュメント (テスト目的のみ) とそのスタイルシートがあります。

<xsl:value-of select="/.">が後続のすべてのノードを処理する理由がわかりません。「/」をテストしました。という名前のノードのみを選択しますchild

また、 を に置き換える/..、期待される結果が得られます ( という名前のノードの値のみを出力しますchild)。

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
<catalog title= "Catalog">
  catalog
  <cd price = "10">
    <title> 
      title text 
      <child>child</child>
    </title>
    <artist>Bob Dylan</artist>
    <country>USA</country>
    <company>Columbia</company>
    <year>1985</year>
  </cd>
  <cd price = "11">
    <title>
      second title text
      <child>second child </child>
    </title>
    <artist>Bob Dylan2</artist>
    <country>USA2</country>
    <company>Columbia2</company>
  </cd>
</catalog>

スタイルシート:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" media-type="text/html"/>

  <xsl:template match="/">
    <html>
      <head>     
        <title> <xsl:value-of select="/catalog/@title" /> </title>     
      </head>
      <body> 
        <xsl:apply-templates select="/catalog/cd/title"/>
      </body>
    </html>
  </xsl:template>

  <xsl:template match="child">
    <b>
      <xsl:value-of select="/.">
      </xsl:value-of>
    </b>
    <br/>
  </xsl:template>
</xsl:stylesheet>

そして結果:

title text catalog title text child Bob Dylan USA Columbia 1985 second title text second child Bob Dylan2 USA2 Columbia2
second title text catalog title text child Bob Dylan USA Columbia 1985 second title text second child Bob Dylan2 USA2 Columbia2
4

2 に答える 2

4

selects が要素ではないroot node/.を選択するため、XPath を使用してテストしたときに奇妙なことが起こりました。XMLのルート要素は名前が付けられたものであり、ルート ノードの唯一の子です。/.catalog/

前のステップに関連する現在のノードを選択するだけなので/、Unix ファイル パスのように機能します (そしてそのように設計されています) 。/..

繰り返しますが、ファイル パスと同様に、相対XPath はコンテキスト ノードに依存するため、.コンテキスト ノードがあったときの XPath を使用した場合childは、child. ただし、スラッシュで始まるパスは絶対パスであり、XML のルート ノードから始まります。それ以外の場所のスラッシュは単なるパス区切りです。

<xsl:value-of select="/.">と同じで<xsl:value-of select="/">、ルート ノードの文字列値を選択します。XPath仕様では、次のように述べています

ルート ノード [または任意の要素ノード] の文字列値は、... ノードのすべてのテキスト ノードの子孫の文字列値をドキュメント順に連結したものです。

したがって、ドキュメント内のすべてのテキストを取得します。

于 2013-05-11T11:12:14.397 に答える