鉴于那条XML:
<?xml version="1.0" encoding="UTF-8"?>
<History ModuleName="Table structure tree">
<Release Date="12122001" Version="3.1" Title="Carrier A" Author="">
<Item Type="">Test A</Item>
</Release>
<Release Date="13122001" Version="3.2" Title="Carrier B" Author="">
<Item Type="">Test B</Item>
</Release>
<Release Date="14122001" Version="3.3" Title="Carrier C" Author="">
<Item Type="">Test C</Item>
</Release>
</History>
如何从节点&#34;历史&#34;中读取ModuleName? 我在这里有不同类型的值,我希望我的XSL显示一个标题或另一个标题,具体取决于模块名称的值。
e.g。如果ModuleName以&#34; Table structrue&#34;开头,则XSL中的标题应为&#34; Fields&#34;。如果ModuleName是其他内容,则标题应为&#34; Releases&#34;。
如何做到这一点?
我是XML / XSL的新手,所以我现在的代码(根本不起作用,我在这里问的原因)看起来像这样:
<xsl:variable name="historyvalue" select="History"/>
<xsl:choose>
<xsl:when test="not(starts-with($historyvalue, 'Table structure'))">
<h3>Releases</h3>
</xsl:when>
<xsl:otherwise>
<h3>Fields</h3>
</xsl:otherwise>
</xsl:choose>
答案 0 :(得分:1)
您想要的值保存在ModuleName
元素的History
属性中,因此语法如下:
<xsl:variable name="historyvalue" select="History/@ModuleName"/>
请注意,这假设您位于匹配/
的模板中(文档节点,它是History
元素的父级)。
我还会考虑撤消xsl:choose
中的逻辑以摆脱not
。
试试这个XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" indent="yes" />
<xsl:template match="/">
<xsl:variable name="historyvalue" select="History/@ModuleName"/>
<xsl:choose>
<xsl:when test="starts-with($historyvalue, 'Table structure')">
<h3>Fields</h3>
</xsl:when>
<xsl:otherwise>
<h3>Releases</h3>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:apply-templates />
</xsl:stylesheet>
在这种情况下你真的不需要变量,你就不用了,只需将xsl:when
更改为......
<xsl:when test="starts-with(History/@ModuleName, 'Table structure')">
或者,考虑模板化方法,模板匹配中的逻辑,而不是xsl:choose
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" indent="yes" />
<xsl:template match="History[starts-with(History/@ModuleName, 'Table structure')]">
<h3>Fields</h3>
<xsl:apply-templates />
</xsl:template>
<xsl:template match="History">
<h3>Releases</h3>
<xsl:apply-templates />
</xsl:template>
</xsl:stylesheet>
在此示例中,匹配历史记录和额外条件(History[starts-with(History/@ModuleName, 'Table structure')]
)的模板对匹配History
的模板具有更高的优先级。