我正在寻找一种将此代码输出为html的方法。
<legal>
<heading>Poo</heading>
<g>fart <a href="http://www.bclaws.ca/EPLibraries/bclaws_new/document/ID/freeside/96165_01">Freedom of Information and Protection of Privacy Act</a> (RSBC 1996 ch. 165):</g>
<foo>
<bar>a </bar>
<bar>b </bar>
<bar>c </bar>
<bar>d </bar>
<bar>e </bar>
<bar>f </bar>
</foo>
<g> faf </g>
<g> faf </g>
<g> faf </g>
<g> faf </g>
<g> faf </g>
<g> faf </g>
<g> faf </g>
<foo>
<bar> a </bar>
<bar> b </bar>
<bar> c </bar>
</foo>
<g> asfd </g>
<g> asfd </g>
<g> asfd </g>
<g> asfd </g>
<g> asfd </g>
<g> asfd </g>
<g> asfd </g>
<foo>
<bar> a </bar>
<bar> b </bar>
<bar> c </bar>
</foo>
</legal>
到目前为止,这是我的XSLT ...我似乎无法输出g
标签中的每个p
元素......它似乎只输出一次而不再输出。而且,我似乎只输出两次相同的东西......我哪里出错了?
<xsl:variable name="legal" select="document('legal.xml')/legal"/>
<xsl:for-each select="$legal/heading">
<h3><xsl:value-of select="$legal/heading"/></h3>
<p><xsl:value-of select="$legal/g"/></p>
<ul>
<xsl:for-each select="$legal/foo/bar">
<li><xsl:value-of select="."/></li>
</xsl:for-each>
</ul>
</xsl:for-each>
答案 0 :(得分:1)
你想要像
这样的东西<xsl:variable name="legal" select="document('legal.xml')/legal"/>
<xsl:for-each select="$legal/heading">
<h3><xsl:value-of select="."/></h3>
<xsl:for-each select="../g"><p><xsl:value-of select="."/></p></xsl:for-each>
<ul>
<xsl:for-each select="$legal/foo/bar">
<li><xsl:value-of select="."/></li>
</xsl:for-each>
</ul>
</xsl:for-each>
答案 1 :(得分:1)
我建议用这个替换你显示的整个代码片段:
<xsl:apply-templates select="document('legal.xml')/legal" />
并添加这些模板:
<xsl:template match="heading">
<h3><xsl:apply-templates /></h3>
</xsl:template>
<xsl:template match="g">
<p><xsl:apply-templates /></p>
</xsl:template>
<xsl:template match="foo">
<ul>
<xsl:apply-templates />
</ul>
</xsl:template>
<xsl:template match="bar">
<li><xsl:apply-templates /></li>
</xsl:template>
您此刻获得重复的原因是因为您在每个标头上进行迭代,然后在该循环的每次迭代中,您正在处理相同的g
元素,并在其上进行迭代foo
元素,无论他们追求的是哪个标题。在您的源代码和html输出中,g
/ p
元素不是header
/ h3
元素的子元素,因此将它们视为处理它们是没有意义的你的代码。