【发布时间】:2011-04-28 16:24:07
【问题描述】:
对 XSL 相当陌生 - 所以请见谅。
我有一个输入的 XML 文档(这实际上是 Jargon File 的 docbook 形式,明显剪掉了):
<?xml version="1.0" encoding="ISO-8859-1"?>
<glossary>
<glossdiv id='glossdiv-0'>
<title>0</title>
<glossentry id='dev-null'>
<glossterm>/dev/null</glossterm>
<glossdef>
snip...
<glossterm>bit bucket</glossterm>
</glossdef>
</glossentry>
<glossentry id='me'>
<glossterm>/me</glossterm>
<glossdef>
snip...
<glossterm>/dev/null</glossterm>
</glossdef>
</glossentry>
</glossdiv>
</glossary>
这是我一直在使用的测试 XSL:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xalan="http://xml.apache.org/xalan"
version="2.0">
<xsl:output indent="yes" xalan:indent-amount="5" />
<xsl:template match="text()" />
<xsl:key name="glossterm-lookup-key" match="glossentry/@id" use="glossentry/glossterm" />
<xsl:template match="glossary" >
<xsl:apply-templates />
</xsl:template>
<xsl:template match="glossterm">
Key: <xsl:value-of select="." />
Value: <xsl:value-of select="key('glossterm-lookup-key', .)" />
<xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
我的目标是,每当我遇到<glossterm> 元素时,我都想在给定glossterm/text() 的情况下查找glossentry/@id。因此,例如,如果我找到<glossterm>/dev/null</glossterm>,我想获得dev-null。
我只对glossterms 中的glossterms 真正感兴趣,但我已经为所有这些东西工作了xsl:templates - 为了测试,我一直在研究所有glossterms。
我尝试创建一个单独的查找文档并使用XML.com: Reading Multiple Input Documents 中描述的方法,但没有成功。
有什么提示吗?
【问题讨论】: