2016-08-19 58 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


这并不是说例子假设每个学生最多只有一个标记。