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到HTML的XSLT_Html_Xml_Xslt - Fatal编程技术网

XML到HTML的XSLT

XML到HTML的XSLT,html,xml,xslt,Html,Xml,Xslt,您好,我正在寻找用于生成HTML的XSLT,如下所示。 以下是转换的详细信息。 请提供你的意见 In HTML an Li element should be populated. <li> <a>Test</a> </li> And under each Pagegroup for every Page Ul should be populated. <ul> <li>

您好,我正在寻找用于生成HTML的XSLT,如下所示。 以下是转换的详细信息。 请提供你的意见

In HTML an Li element should be populated.

    <li>
        <a>Test</a>
    </li>

And under each Pagegroup for every Page Ul should be populated.
<ul>
        <li>
            <a>Test Role 1</a>
        </li>
        <li>
            <a>Test Role 2</a>
        </li>
</ul>
对于每个页面组,我需要创建一个

In HTML an Li element should be populated.

    <li>
        <a>Test</a>
    </li>

And under each Pagegroup for every Page Ul should be populated.
<ul>
        <li>
            <a>Test Role 1</a>
        </li>
        <li>
            <a>Test Role 2</a>
        </li>
</ul>
在HTML中,应填充Li元素。
  • 试验
  • 每个页面的每个页面组下都应填充Ul。
    • 测试角色1
    • 测试角色2
    XML:

    In HTML an Li element should be populated.
    
        <li>
            <a>Test</a>
        </li>
    
    And under each Pagegroup for every Page Ul should be populated.
    <ul>
            <li>
                <a>Test Role 1</a>
            </li>
            <li>
                <a>Test Role 2</a>
            </li>
    </ul>
    
    
    
    输出HTML预期值

    In HTML an Li element should be populated.
    
        <li>
            <a>Test</a>
        </li>
    
    And under each Pagegroup for every Page Ul should be populated.
    <ul>
            <li>
                <a>Test Role 1</a>
            </li>
            <li>
                <a>Test Role 2</a>
            </li>
    </ul>
    
    <ul>
        <li>
            <a>Test</a>
        </li>
        <ul>
            <li>
                <a>Test Role 1</a>
            </li>
            <li>
                <a>Test Role 2</a>
            </li>
            <ul>
                <li>
                    <a>Projects</a>
                </li>
                <ul>
                    <li>
                        <a>Test 2 3</a>
                    </li>
                    <li>
                        <a>Test 2 5</a>
                    </li>
                </ul>
            </ul>
        </ul>
    </ul>
    
    • 试验
      • 测试角色1
      • 测试角色2
        • 项目
          • 测试2 3
          • 测试2 5
    XSLT已尝试

    In HTML an Li element should be populated.
    
        <li>
            <a>Test</a>
        </li>
    
    And under each Pagegroup for every Page Ul should be populated.
    <ul>
            <li>
                <a>Test Role 1</a>
            </li>
            <li>
                <a>Test Role 2</a>
            </li>
    </ul>
    
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
                <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
                <xsl:template match="pagegroup">
                            <ul>
                                        <xsl:apply-templates select="pages"/>
                                        <li>
                                        <xsl:value-of select="@title"/>
                                        </li>
                            </ul>
                </xsl:template>
                <xsl:template match="pages">
                            <li>
                                        <xsl:value-of select="@role"/>
                                        <xsl:if test="pagegroup">
                                                    <ul>
                                                                <xsl:apply-templates select="pages"/>
                                                                <li>
                                                                <xsl:value-of select="@title" />
                                                                </li>
                                                    </ul>
                                        </xsl:if>
                            </li>
                </xsl:template>
    </xsl:stylesheet>
    
    
    

  • 你离得不远。主要问题是,在要匹配页面组的模板中,您正在这样做

    In HTML an Li element should be populated.
    
        <li>
            <a>Test</a>
        </li>
    
    And under each Pagegroup for every Page Ul should be populated.
    <ul>
            <li>
                <a>Test Role 1</a>
            </li>
            <li>
                <a>Test Role 2</a>
            </li>
    </ul>
    
    <xsl:apply-templates select="pages"/>
    
    
    
    如果确实要这样做,请同时匹配页面页面组

    In HTML an Li element should be populated.
    
        <li>
            <a>Test</a>
        </li>
    
    And under each Pagegroup for every Page Ul should be populated.
    <ul>
            <li>
                <a>Test Role 1</a>
            </li>
            <li>
                <a>Test Role 2</a>
            </li>
    </ul>
    
    <xsl:apply-templates/>
    
    
    
    尝试以下XSLT

    In HTML an Li element should be populated.
    
        <li>
            <a>Test</a>
        </li>
    
    And under each Pagegroup for every Page Ul should be populated.
    <ul>
            <li>
                <a>Test Role 1</a>
            </li>
            <li>
                <a>Test Role 2</a>
            </li>
    </ul>
    
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
       <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
       <xsl:template match="pagegroup">
          <ul>
             <li>
                <xsl:value-of select="@title"/>
             </li>
             <ul>
                <xsl:apply-templates/>
             </ul>
          </ul>
       </xsl:template>
       <xsl:template match="pages">
          <li>
             <xsl:value-of select="@role"/>
          </li>
       </xsl:template>
    </xsl:stylesheet>
    
    
    
  • 应用于XML时,将输出以下内容

    In HTML an Li element should be populated.
    
        <li>
            <a>Test</a>
        </li>
    
    And under each Pagegroup for every Page Ul should be populated.
    <ul>
            <li>
                <a>Test Role 1</a>
            </li>
            <li>
                <a>Test Role 2</a>
            </li>
    </ul>
    
    <ul>
       <li>Test</li>
       <ul>
          <li>Test Role 1</li>
          <li>Test Role 2</li>
          <ul>
             <li>Projects</li>
             <ul>
                <li>Rol 3</li>
                <li>Rol 4</li>
             </ul>
          </ul>
       </ul>
    </ul>
    
    • 试验
      • 测试角色1
      • 测试角色2
        • 计划
          • Rol 3
          • Rol 4

    我想你有点不明白你想要什么

    In HTML an Li element should be populated.
    
        <li>
            <a>Test</a>
        </li>
    
    And under each Pagegroup for every Page Ul should be populated.
    <ul>
            <li>
                <a>Test Role 1</a>
            </li>
            <li>
                <a>Test Role 2</a>
            </li>
    </ul>
    
    这一点越来越接近了,但您仍然无法得到您想要的,因为在一堆页面中,您似乎想要角色,在另一个描述中。这是可能的,但我不确定这是否是你想要的

    In HTML an Li element should be populated.
    
        <li>
            <a>Test</a>
        </li>
    
    And under each Pagegroup for every Page Ul should be populated.
    <ul>
            <li>
                <a>Test Role 1</a>
            </li>
            <li>
                <a>Test Role 2</a>
            </li>
    </ul>
    
        <?xml version="1.0" encoding="ISO-8859-1"?>
    
        <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
            <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    
            <xsl:template match="pagegroup">
                <ul>
                    <li>
                        <a><xsl:value-of select="@title"/></a>
                    </li>
                    <xsl:if test="pages | pagegroup">
                        <ul>
                            <xsl:apply-templates select="pages | pagegroup"/>
                        </ul>
                    </xsl:if>
    
                </ul>
            </xsl:template>
    
            <xsl:template match="pages">
                <li>
                    <a><xsl:value-of select="@role"/></a>
                    <xsl:if test="pagegroup">
                        <ul>
    
                            <li>
                                <xsl:value-of select="@title" />
                            </li>
                        </ul>
                    </xsl:if>
                </li>
            </xsl:template>
        </xsl:stylesheet>
    
    
    

  • 根据您的结构,您需要一个递归模板,该模板将遍历所有页面组以创建LIs。您的实际输出是什么?