首页 文章

如何在XML中从XSL动态获取值?

提问于
浏览
0

我有一个xml文件和xsl文件链接到它,这很好 . 我试图找出一种方法,我可以从xml动态拉取值而不是写

xsl:value-of select =“tag ...”

每次我在caseStudy标签中添加一个新节点 . 我包括下面的xml和xsl文件 .

XML

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="caseStudies.xsl"?>

<caseStudiesList>
    <caseStudy>
        <tag1 label="tag1">TAG1_value</tag1>
        <tag2 label="tag2">TAG2_value</tag2>
        <tag3 label="tag3">TAG3_value</tag3>
        <tag4 label="tag4">TAG4_value</tag4>
        <tag5 label="tag5">TAG5_value</tag5>
    </caseStudy>
    <caseStudy>
        <tag1 label="tag1">TAG1_value</tag1>
        <tag2 label="tag2">TAG2_value</tag2>
        <tag3 label="tag3">TAG3_value</tag3>
    </caseStudy>
    <caseStudy>
        <tag1 label="tag1">TAG1_value</tag1>
        <tag2 label="tag2">TAG2_value</tag2>
        <tag3 label="tag3">TAG3_value</tag3>
        <tag4 label="tag4">TAG4_value</tag4>
        <tag5 label="tag5">TAG5_value</tag5>
        <tag6 label="tag6">TAG6_value</tag6>
        <tag7 label="tag7">TAG7_value</tag7>
    </caseStudy>
</caseStudiesList>

XSL

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
    <html>
        <head>
        </head>
        <body>
            <xsl:for-each select="caseStudiesList/caseStudy">
                <div class="caseStudyContainer ">
                    <ul>
                        <li>
                            <span><xsl:value-of select="tag1/@label" /></span>
                            <xsl:value-of select="tag1" />                          
                        </li>
                        <li>
                            <span><xsl:value-of select="tag2/@label" /></span>
                            <xsl:value-of select="tag2" />                          
                        </li>
                        <li>
                            <span><xsl:value-of select="tag3/@label" /></span>
                            <xsl:value-of select="tag3" />                          
                        </li>
                        <li>
                            <span><xsl:value-of select="tag4/@label" /></span>
                            <xsl:value-of select="tag4" />                          
                        </li>
                        <li>
                            <span><xsl:value-of select="tag5/@label" /></span>
                            <xsl:value-of select="tag5" />                          
                        </li>
                        <li>
                            <span><xsl:value-of select="tag6/@label" /></span>
                            <xsl:value-of select="tag6" />                          
                        </li>
                        <li>
                            <span><xsl:value-of select="tag7/@label" /></span>
                            <xsl:value-of select="tag7" />                          
                        </li>
                    </ul>
                </div>
            </xsl:for-each>
        </body>
    </html>
</xsl:template>
</xsl:stylesheet>

希望我有所作为 . 有没有办法从XML文件中在XSL中动态获取值?

谢谢

2 回答

  • 0

    你只需要为每个人筑巢另一个......

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <html>
        <head>
        </head>
        <body>
            <xsl:for-each select="caseStudiesList/caseStudy">
            <div class="caseStudyContainer ">
                <ul>
                  <xsl:for-each select="*">
                    <li>
                        <span><xsl:value-of select="@label" /></span>
                        <xsl:value-of select="." />                          
                    </li>
                  </xsl:for-each>
                </ul>
            </div>
            </xsl:for-each>
        </body>
        </html>
    </xsl:template>
    </xsl:stylesheet>
    
  • 2

    作为XML中的规则,不建议使用不同的标记名称来引用相同类型的数据 . 这是一种情况,即该规则真正进入了画面 . 你已经知道如何使用 for-each 所以为什么不在这里申请呢?

    <xsl:for-each select="caseStudiesList/caseStudy">
                    <div class="caseStudyContainer ">
                        <ul><xsl:for-each select="tag"><li><span><xsl:value-of select="@label" /></span><xsl:value-of select="." /></li>
                           </xsl:for-each></ul>
    </div>
    </xsl:for-each>
    

    只需调用每个单独的元素 tag 而不是 tag1 tag2 等等 . 好吧,考虑一个比"tag"更明智的名称 .

相关问题