我的XML源指定交叉引用linkGrp
。 基于由@target属性指定的那些交叉引用,我需要组的值s
元件。 如果目标属性包含一到一个参考,我的代码有很好的作品如下:
<DIV>
<div id="e">
<s id="e1">AAAAA</s>
<s id="e2">BBBBB</s>
<s id="e3">CCCCC</s>
</div>
<div id="fr">
<s id="fr1">DDDDD</s>
<s id="fr2">EEEEE</s>
<s id="fr3">FFFFF</s>
</div>
<linkGrp type="alignment" domains="e fr">
<link target="#e1 #fr1"/>
<link target="#e2 #fr3"/>
<link target="#e3 #fr2"/>
</linkGrp>
</DIV>
所请求的HTML输出我得到的是这样的:
*AAAAA
DDDDD
*BBBBB
FFFFF
*CCCCC
EEEEE
为了得到这样的结果我用下面的XSLT代码:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="linkId" match="s" use="@id"/>
<xsl:template match="/DIV">
<html>
<head>
<title>Test</title>
</head>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="link">
<ul>
<li>
<xsl:value-of select="key('linkId',substring-before(substring-after(@target, '#'), ' '))"/>
<br/>
<xsl:value-of select="key('linkId',substring-after(@target, ' #'))"/>
</li>
</ul>
</xsl:template>
<xsl:template match="div"/>
<xsl:template match="s"/>
<xsl:template match="*">
<xsl:message terminate="no">
WARNING: Unmatched element: <xsl:value-of select="name()"/>
</xsl:message>
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
然而,当我在一个@target添加更多的交叉引用我的XSLT代码不工作那么好link
元素这样的:
<DIV>
<div id="e">
<s id="e1">AAAAA</s>
<s id="e2">BBBBB</s>
<s id="e3">CCCCC</s>
</div>
<div id="fr">
<s id="fr1">DDDDD</s>
<s id="fr2">EEEEE</s>
<s id="fr3">FFFFF</s>
</div>
<linkGrp type="alignment" domains="e fr">
<link target="#e1 #fr1"/>
<link target="#e2 #fr3 #fr1 #fr2"/>
<link target="#e3 #fr2 #fr3"/>
</linkGrp>
</DIV>
随着XML源中多个交叉引用,我的XSLT代码不取任何比赛。 我需要我的代码来检索指定的所有比赛@target
属性。 任何人都能指出的错误在我的XSLT代码或提供替代解决方案?