質問

では、以下のXML:

<current>
  <login_name>jd</login_name>
</current>
<people>
  <person>
    <first>John</first>
    <last>Doe</last>
    <login_name>jd</login_name>
  </preson>
  <person>
    <first>Pierre</first>
    <last>Spring</last>
    <login_name>ps</login_name>
  </preson>
</people>

方法を教えてください"John Doe"から、現在のログインを正規表現エンジン?

また、以下の:

<xsl:template match="current/login_name">
  <xsl:value-of select="../people/first[login_name = .]"/>
  <xsl:text> </xsl:text>
  <xsl:value-of select="../people/last[login_name = .]"/>
</xsl:template>
役に立ちましたか?

解決

私の定義のキーインデックスの人

<xsl:key name="people" match="person" use="login_name" />

キーを使用だけのコンで入手できるかもしれませんが、も効率だけが多いることを取得する <person> 要素に基づく <login_name> 子供です。

いようにテンプレートが返されるフォント名の指定 <person>:

<xsl:template match="person" mode="name">
  <xsl:value-of select="concat(first, ' ', last)" />
</xsl:template>

その思い:

<xsl:template match="current/login_name">
  <xsl:apply-templates select="key('people', .)" mode="name" />
</xsl:template>

他のヒント

したい current() 機能

<xsl:template match="current/login_name">
  <xsl:value-of select="../../people/person[login_name = current()]/first"/>
  <xsl:text> </xsl:text>
  <xsl:value-of select="../../people/person[login_name = current()]/last"/>
</xsl:template>

または少しよりクリーナー:

<xsl:template match="current/login_name">
  <xsl:for-each select="../../people/person[login_name = current()]">
    <xsl:value-of select="first"/>
    <xsl:text> </xsl:text>
    <xsl:value-of select="last"/>
  </xsl:for-each>
</xsl:template>

場アクセスするために必要な複数のユーザー、そして JeniTの <xsl:key /> アプローチ するのにも最適です。

こちらはっかかれています。

<xsl:template match="current/login_name">
    <xsl:variable name="person" select="//people/person[login_name = .]" />
    <xsl:value-of select="concat($person/first, ' ', $person/last)" />
</xsl:template>

して割り当ての選択 <person> ノード変数を使用している concat() 機能出力の最初/最後ます。

また間違えたコンポーネントです。の <person> ノードが正しく終わ </preson> (商品につけられたタ)

より良い解決するというかっていれば、全体の構造をXMLドキュメント(ルートノードなど)

いと思ったのはたったのに差し替え、試合のための"現在"のノードではなく、試合のノード:

<xsl:variable name="login" select="//current/login_name/text()"/>

<xsl:template match="current/login_name">
<xsl:value-of select='concat(../../people/person[login_name=$login]/first," ", ../../people/person[login_name=$login]/last)'/>

</xsl:template>

るだけで追加さんのスタック

<xsl:template match="login_name[parent::current]">
 <xsl:variable name="login" select="text()"/>
 <xsl:value-of select='concat(ancestor::people/child::person[login_name=$login]/child::first/text()," ",ancestor::people/child::person[login_name=$login]/child::last/text())'/>
</xsl:template>

そしてもっとも利用軸の明示的に私のXPath、より詳細が明確になぁ.

によってどのようにXML文書を見る(このはただのフラグメント)に必要がある場合がありますプロジェクトへの協賛を始めの参考に"祖先::人"例えば"祖先::人[1]"プロジェクトへの協賛を始めの第一人の祖先.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top