Совершенно новичок в XSL - так что, пожалуйста, прости нубишизм.
У меня есть входной XML-документ (на самом деле это документальная форма файла Jargon , значительно оторванная):
<?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>
, я хотел бы найти glossentry/@id
с учетом glossterm/text()
. Так, например, если я найду <glossterm>/dev/null</glossterm>
, я бы хотел получить dev-null
.
Меня действительно интересуют только glossterms в glossdef, но у меня есть xsl: шаблоны для всего этого - ради тестирования, я только что работал над всеми glossterms.
Я попытался создать отдельный справочный документ и использовать подход, описанный на XML.com: чтение нескольких входных документов , но мне не повезло с этим.
Есть подсказки?