我有下面的XML。
<toc-div>
<title>CHAPTER 1 INTRODUCTION</title>
<subtitle>
<content-style font-style="italic">David Smith</content-style>
</subtitle>
<toc-item>
<toc-title>1. Love on the Star Ferry</toc-title>
<toc-pg>2</toc-pg>
</toc-item>
<toc-item>
<toc-title>2. Contracts, Torts, Copyrights and Other Mysteries of the Legal World</toc-title>
<toc-pg>2</toc-pg>
</toc-item>
</toc-div>
实际上,我希望获得与不同文档中的标题匹配的引用。
我的第二份文件是
<chapter num="1">
<toc>
<toc-part>
<toc-div>
<toc-item>
<toc-title>1. Love on the Star Ferry</toc-title>
<toc-pg>1.002</toc-pg>
</toc-item>
<toc-item>
<toc-title>2. Contracts, Torts, Copyrights and Other Mysteries of the Legal World</toc-title>
<toc-pg>1.004</toc-pg>
</toc-item>
</toc-div>
</toc-part>
</toc>
</chapter>
条件是首先应该在两种情况下匹配标题,然后应该采用并显示<toc-pg>
。我可以使用下面的xslt重定向到该文档,但我无法知道如何检索这些值。下面是我试过的XSLT。
<xsl:template match="toc-item">
<xsl:variable name="prent">
<xsl:value-of select="substring-before(substring-after(../title,' '),' ')"/>
</xsl:variable>
<xsl:variable name="tex">
<xsl:value-of select="./toc-title/text()"/>
</xsl:variable>
<xsl:variable name="cha">
<xsl:value-of select="$prent"/>
</xsl:variable>
<xsl:if test="document(concat('C:\Documents and Settings\u0138039\Desktop\Proview\HK\Business Law in Hong Kong\Source\Business Law in Hong Kong/Chapter ',$cha,'.xml'))/chapter/toc/toc-part/toc-div/toc-item/toc-title/text() = ./toc-title/text()">
<xsl:copy-of select="$tex"/>
<xsl:apply-templates select="document(concat('C:\Documents and Settings\u0138039\Desktop\Proview\HK\Business Law in Hong Kong\Source\Business Law in Hong Kong/Chapter ',$cha,'.xml'))/chapter/toc/toc-part/toc-div/toc-item/toc-title" mode="x"/>
</xsl:if>
</xsl:template>
答案 0 :(得分:0)
虽然问题标题为“从不同文档中获取值”,但已发布的代码已包含“document()”命令,该命令可实现此目的。
真正的问题似乎是“如何在apply-templates选择中添加过滤器”。这是使用方括号完成的:
<xsl:template match="your_element">
<xsl:variable name="filter" select="id"/>
... other stuff ...
<xsl:apply-templates select="document('file.xml')/diff_element[diff_id=$filter]"/>
</xsl:template>
您可以使用“current()”来使用当前元素的值,而不是设置变量。我使用了通用元素名称而不是实际元素名称,因为这样更明显会发生什么。
答案 1 :(得分:0)
if条件应改为
<xsl:if test="document(concat('C:\Documents and Settings\u0138039\Desktop\Proview\HK\Business Law in Hong Kong\Source\Business Law in Hong Kong/Chapter ',$cha,'.xml'))/chapter/toc/toc-part/toc-div/toc-item/toc-title/text() = ./toc-title/text()">
<xsl:value-of select="document(concat('C:\Documents and Settings\u0138039\Desktop\Proview\HK\Business Law in Hong Kong\Source\Business Law in Hong Kong/Chapter ',$cha,'.xml'))/chapter/toc/toc-part/toc-div/toc-item[toc-title=$tex]/toc-pg" />
</xsl:if>
感谢大家的帮助。
由于