2011-10-19 11 views
2

同様の問題: XPath: select a node based on another node?XSL述語を使用して、別のノードの値に基づいてノードを選択し、この質問へ

オブジェクトは、兄弟ノード、この場合PAGETITLEノードの値に基づいてノードを選択することですPagetypeノードの値に基づいています。

のXPath:

/dsQueryResponse/Rows/Row/@Title 
/dsQueryResponse/Rows/Row/@Pagetype 
/dsQueryResponse/Rows/Row/@Pagetitle 

このXSLは何も返しません。

<xsl:value-of select= "/dsQueryResponse/Rows/Row[Pagetype='Parent']/@Pagetitle" /> 

サンプルXML:その場合

<dsQueryResponse> 
     <Rows> 
      <Row> 
       <Title>1</Title> 
       <Pagetype>Parent</Pagetype> 
       <Pagetitle>title of page</Pagetitle> 
      </Row> 
     </Rows> 
</dsQueryResponse> 

目標は、ページタイトルの値を持つことであるが返さPagetypeの値が「Parent」である。

+0

入力XMLのサンプルを表示して、どのノードを選択するかを説明してください。現在の述語 '[Pagetype = 'Parent']'は、 'Parent'という値を持つ' Pagetype'という名前の子要素をチェックします。 –

+0

@Martin xmlのサンプルを追加し、選択したいノードを明確にしようとしました。 – matt

答えて

3

@記号は、ノードの属性を示します。あなたはページタイプ属性が親に等しい属性PAGETITLEの値を返すようにしたいのであれば、それは読んでください:

<xsl:value-of select= "/dsQueryResponse/Rows/Row[@Pagetype='Parent']/@Pagetitle" /> 

私はXPATHをテストするために使用する便利リソースが付きhttp://www.xmlme.com/XpathTool.aspx

+0

リンクをありがとう。それは便利です。私は明確にするためにxmlのスニペットを追加しました。 PagetypeとPagetitleはどちらも要素/ノードであり、属性はありません。私は@を使うべきときに混乱していると思います。 xpath Sharepoint Designerには、Pagetile要素用に含まれています。 – matt

+0

@_Aaron:あなたの答えの後にOPがソースXMLを追加したとみられ、その中に 'Pagetype'属性がありません。 –

0

です提供されるXML文書の使用

/*/*/*[Pagetype = 'Parent']/Pagetitle 

XSLT - ベースの検証

この変換は、提供されるXML文書に適用され
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 

<xsl:template match="/"> 
    <xsl:copy-of select="/*/*/*[Pagetype = 'Parent']/Pagetitle"/> 
</xsl:template> 
</xsl:stylesheet> 

<Pagetitle>title of page</Pagetitle> 
:XPath式が評価され

<dsQueryResponse> 
     <Rows> 
      <Row> 
       <Title>1</Title> 
       <Pagetype>Parent</Pagetype> 
       <Pagetitle>title of page</Pagetitle> 
      </Row> 
     </Rows> 
</dsQueryResponse> 

すべて(この場合は一つだけ)選択されたノードは、出力あります

+0

私はそれを試みましたが、出力はまだ何もありません。単純な価値のものでさえも何も返しません。 xsl:ifsでフィルタリングして述語を使用しないとすべて動作しますので、xpathsが正しいことを確信しています。多分それは、Sharepointがxslを読み取る方法と関係があります。 – matt

0

ここで私はこの問題を理解しています:子要素Pagetypeが「Parent」の各行を見つけ、子要素Pagetitleの値を表示します。

私の解決策:基準を満たすすべての行のノードセットを作成し、子要素Pagetitleの値を選択します。

<xsl:for-each select="/dsQueryResponse/Rows/Row[Pagetype='Parent']"> 
    <xsl:value-of select="Pagetitle" /> 
</xsl:for-each> 
関連する問題