我已经看到了question,我认为这是我问题的答案。
这只是目前的测试代码。我有一个虚拟的XML数据文件:
<?xml version="1.0" encoding="UTF-8"?>
<NamesToHighlight Version="180900" xmlns="http://www.publictalksoftware.co.uk/msa">
<Name>Mr Happy</Name>
<Name>Mr Grumpy</Name>
</NamesToHighlight>
这个文件链接到我的XSL,我只是在这个阶段进行测试。现在,这段代码可以运行:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" xmlns:msa="http://www.publictalksoftware.co.uk/msa">
<xsl:output method="html" indent="yes" version="4.01"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"/>
<xsl:variable name="Names" select="document('NamesToHighlight.XML')"/>
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<link rel="stylesheet" type="text/css" href="Workbook-S-140.css"/>
<title>Title of Schedule</title>
</head>
<body>
<xsl:for-each select="MeetingWorkBook/Meeting">
<div class="containerPage">
<p>
<xsl:value-of select="WeeklyBibleReading"/>
</p>
</div>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
它正确地显示了4个圣经阅读参考:
但如果我试试这个:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" xmlns:msa="http://www.publictalksoftware.co.uk/msa">
<xsl:output method="html" indent="yes" version="4.01"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"/>
<xsl:variable name="Names" select="document('NamesToHighlight.XML')"/>
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<link rel="stylesheet" type="text/css" href="Workbook-S-140.css"/>
<title>Title of Schedule</title>
</head>
<body>
<xsl:for-each select="$Names/msa:NamesToHighlight/msa:Name">
<xsl:variable name="NameToHighlight" select="."/>
<p>
<xsl:value-of select="$NameToHighlight"/>
</p>
<xsl:for-each select="MeetingWorkBook/Meeting">
<div class="containerPage">
<p>
<xsl:value-of select="WeeklyBibleReading"/>
</p>
</div>
</xsl:for-each>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
现在只显示名称:
我认为这与链接的问题有关,所以我尝试了:
<xsl:for-each select="/MeetingWorkBook/Meeting">
但它没有任何区别。我甚至尝试使用//
作为前缀,这没有任何区别。我假设&#34;上下文&#34;是&#34;变量&#34;我在迭代。我该如何处理?
我不确定我能不能做我想做的事。似乎我可能不得不改变我的应用程序逻辑并使名称列表实际上成为&#34; MeetingWorkBook&#34; XML文件。但我会等着看是否有人对此有任何建议。
目前我已经解决了这个问题。如果我将外部XML中的名称列表移动到计划中,那么我可以使用两个带有 root 路径的for-each
循环。一切都好。
答案 0 :(得分:1)
您可以尝试将当前XML放在变量中,例如:
<xsl:variable name="curr_document" select="."/>
并在后面的第二个for-each循环中引用
<xsl:for-each select="$curr_document/MeetingWorkBook/Meeting">
您的XSLT应如下所示:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" xmlns:msa="http://www.publictalksoftware.co.uk/msa">
<xsl:output method="html" indent="yes" version="4.01"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"/>
<xsl:variable name="Names" select="document('NamesToHighlight.XML')"/>
<xsl:template match="/">
<xsl:variable name="curr_document" select="."/>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<link rel="stylesheet" type="text/css" href="Workbook-S-140.css"/>
<title>Title of Schedule</title>
</head>
<body>
<xsl:for-each select="$Names/msa:NamesToHighlight/msa:Name">
<xsl:variable name="NameToHighlight" select="."/>
<p>
<xsl:value-of select="$NameToHighlight"/>
</p>
<xsl:for-each select="$curr_document/MeetingWorkBook/Meeting">
<div class="containerPage">
<p>
<xsl:value-of select="WeeklyBibleReading"/>
</p>
</div>
</xsl:for-each>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>