Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 如何在for-each内部迭代a for-each,其中外部for-each是一个变量_Xml_Xslt 1.0 - Fatal编程技术网

Xml 如何在for-each内部迭代a for-each,其中外部for-each是一个变量

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数据文件:

<?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>