我想从以下2个
XML文件中获取特定学生的总数:
—文件:mark.xml —-
<marks>
<mark type="HD">10</mark>
<mark type="D">8</mark>
<mark type="C">5</mark>
</marks>
—文件:studentRecord.xml —
<students>
<student id="1234">
<grade>HD</grade>
</student>
<student id="1234">
<grade>C</grade>
</student>
<student id="1111">
<grade>D</grade>
</student>
</students>
如何获得ID为1234的学生的总分?它应该是15.
最佳答案 这是一个简单易用的XSLT解决方案(实际上它只是XPath):
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="my:my">
<xsl:output method="text"/>
<my:MarkValues>
<marks>
<mark type="HD">10</mark>
<mark type="D">8</mark>
<mark type="C">5</mark>
</marks>
</my:MarkValues>
<xsl:template match="/*">
<xsl:value-of select=
"sum(document('')/*
/my:MarkValues/*/*
[@type = current()/*
[@id='1234']/grade
]
)"/>
</xsl:template>
</xsl:stylesheet>
当此转换应用于提供的XML文档(名为“studentRecord.xml”)时:
<students>
<student id="1234">
<grade>HD</grade>
</student>
<student id="1234">
<grade>C</grade>
</student>
<student id="1111">
<grade>D</grade>
</student>
</students>
产生了想要的答案:
15
如果要将标记值保存在单独的文件中(不是如上所述嵌入到XSLT样式表中),则应稍微更改XPath表达式(只是document()函数的参数:
sum(document('mark.xml')/*/*
[@type = current()/*
[@id='1234']/grade
]
)
说明:
>使用XSLT document()
功能.
>使用XSLT current()
功能.
>使用XPath sum()
功能.