2016-08-19 4 views
0

私は変数のようにxpathの中の要素の値を選択することが可能かどうかを調べようとしていますか?これは可能ですか?これを達成するためのユーザーフレンドリーな方法は何ですか?変数と同様にXPATH式の要素の値を使用するか?

XML

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="grades.xsl"?> 
<school> 
<subject Id="3311"> 
<className>English</className> 
<studentList> 
<student id="1001">Lisa Simpson</student> 
<student id="1002">Barney Rubble</student> 
<student id="1003">Donald Duck</student> 
</studentList> 
<classwork> 
<assignment name="Final Exam"> 
<mark studId="1001">38</mark> 
<mark studId="1002">21</mark> 
<mark studId="1003">20.5</mark> 
</assignment> 
</classwork> 
</subject> 
</school> 

XSL

<td><xsl:value-of select="@sid"/></td> 
    <td><xsl:value-of select="//assignment/mark[@studId='@sid']"/></td> 
+0

ありがとうございました。 –

答えて

0

私はあなたを疑う本当の質問はstudentの文脈から学生のマークを取得する方法です。

これは、使用して行うことができます。その後に式key('mark', @id)を使用

<xsl:key name="marks" match="mark" use="@studId" /> 

<xsl:value-of select="//assignment/mark[@studId=current()/@id]"/> 

より良い答えは、あなたのスタイルシートのトップレベルでkeyを定義することです関連するマークを取得します。例えば

、次のスタイルシート:

XSLTご入力の例に適用1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/> 

<xsl:key name="marks" match="mark" use="@studId" /> 

<xsl:template match="/school"> 
    <table border="1"> 
     <xsl:for-each select="subject/studentList/student"> 
      <tr> 
       <td> 
        <xsl:value-of select="."/> 
       </td> 
       <td> 
        <xsl:value-of select="key('marks', @id)"/> 
       </td> 
      </tr> 
     </xsl:for-each> 
    </table> 
</xsl:template> 

</xsl:stylesheet> 

、表示されます:

enter image description here


ないこと例はそれぞれ学生は最大で1つのマークしか持たない。

関連する問題