2016-08-19 43 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背景下獲得學生的痕跡。

這是可以做到用:

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

更好的答案應該是在你的樣式表爲一體的頂級定義一個key

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

然後用表達key('mark', @id)到得到相關的標記。

例如,下面的樣式表:

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


這並不是說例子假設每個學生最多隻有一個標記。

相關問題