我有一个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中动态获取值?
谢谢
答案 0 :(得分:2)
你只需要为另一个人嵌套另一个......
<?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>
答案 1 :(得分:0)
作为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”更明智的名称。