Xml 如何在for-each内部迭代a for-each,其中外部for-each是一个变量
我已经看到了这一点,我认为这将是我的问题的答案 这只是目前的测试代码。我有一个虚拟XML数据文件:Xml 如何在for-each内部迭代a for-each,其中外部for-each是一个变量,xml,xslt-1.0,Xml,Xslt 1.0,我已经看到了这一点,我认为这将是我的问题的答案 这只是目前的测试代码。我有一个虚拟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&l
<?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">
但这没什么区别。我甚至试着用//作为前缀,但没什么区别。我假设上下文是我正在迭代的变量。我该怎么处理
我不确定我真的能做我想做的事。似乎我必须更改我的应用程序逻辑,并使名称列表实际上成为MeetingWorkBook XML文件的一部分。但我会等着看是否有人对此有任何建议
目前,我已经解决了这个问题,byc挂起了我的逻辑。如果我将名称列表从外部XML移动到计划中,那么我可以使用两个for-each循环和根路径。很好。您可以尝试将当前XML放在一个变量中,例如:
<xsl:variable name="curr_document" select="."/>
并在后面的第2个循环中为每个循环引用该值
<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>