我正在使用xslt片段将此信息提取到页面中。我通过xslt片段调用将我的pageIds传递给xslt。如何扩展此代码能够处理那些传入参数的代码,以便从xml中显示正确的数据?
这是一个片段示例。
<%
Dim mm_xsl20 As MM.XSLTransform = New MM.XSLTransform()
mm_xsl20.setXML(Server.MapPath("/" & countryVar & "/" & langVar & "/titles.xml"))
mm_xsl20.setXSL(Server.MapPath("/data/xslt/breadcrumb.xsl"))
mm_xsl20.addParameter("pageID1", "hpPage")
mm_xsl20.addParameter("pageID1_char", "true")
mm_xsl20.addParameter("pageID2", "homePage")
mm_xsl20.addParameter("pageID2_char", "true")
Response.Write(mm_xsl20.Transform())
%>
#
我通过xml和xslt片段将面包屑送入页面。我的问题是我的xslt是循环的并且重复了div breadcrumbtrail我如何将它放在xslt中,这样div breadcrumbtrail只显示一次而且所有if项都包含在其中?
谢谢
<xsl:template match="/pageInfo/page">
<div id="breadcrumbtrail">
<xsl:if test="name[. = $pageID1]">
<a href="{url}"><xsl:value-of select="breadCrumbName"/></a>
<xsl:if test="$pageID1_char = 'true'">></xsl:if>
</xsl:if>
<xsl:if test="name[. = $pageID2]">
<a href="{url}"><xsl:value-of select="breadCrumbName"/></a>
<xsl:if test="$pageID2_char = 'true'">></xsl:if>
</xsl:if>
<xsl:if test="name[. = $pageID3]">
<a href="{url}"><xsl:value-of select="breadCrumbName"/></a>
<xsl:if test="$pageID3_char = 'true'">></xsl:if>
</xsl:if>
<xsl:if test="name[. = $pageID4]">
<a href="{url}"><xsl:value-of select="breadCrumbName"/></a>
</xsl:if>
</div>
</xsl:template>
答案 0 :(得分:1)
我的问题是我的xslt是循环的 通过和div breadcrumbtrail是 重复如何将其放入 xslt使div breadcrumbtrail 只显示一次和所有if 物品包含在里面吗?
以下是我认为这样做的好方法:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:meta="my:metadata" exclude-result-prefixes="meta">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<meta:pageIds>
<page pid="p1"/>
<page pid="p2"/>
<page pid="p3"/>
<page pid="p4"/>
</meta:pageIds>
<xsl:template match="/*">
<div id="breadcrumbtrail">
<xsl:apply-templates/>
</div>
</xsl:template>
<xsl:template match="page[name=document('')/*/meta:pageIds/page/@pid]">
<a href="{url}">
<xsl:apply-templates select="breadCrumbName"/>
</a>
<xsl:if test=
"document('')/*/meta:pageIds/page
[not(position()
=
last()
)
]
/@pid=current()/name">
<xsl:text>></xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
将此转换应用于以下XML文档:
<pageInfo>
<page>
<name>p1</name>
<url>http://myUrl.com/p1/</url>
<breadCrumbName>News</breadCrumbName>
</page>
<page>
<name>p2</name>
<url>http://myUrl.com/p2/</url>
<breadCrumbName>International</breadCrumbName>
</page>
<page>
<name>p3</name>
<url>http://myUrl.com/p3/</url>
<breadCrumbName>Europe</breadCrumbName>
</page>
<page>
<name>p4</name>
<url>http://myUrl.com/p4/</url>
<breadCrumbName>France</breadCrumbName>
</page>
</pageInfo>
产生了想要的正确结果:
<div id="breadcrumbtrail">
<a href="http://myUrl.com/p1/">News</a>>
<a href="http://myUrl.com/p2/">International</a>>
<a href="http://myUrl.com/p3/">Europe</a>>
<a href="http://myUrl.com/p4/">France</a>
</div>
请注意:
代码中的大部分条件逻辑都是不必要的,在此解决方案中已被删除。
参与形成面包屑的页面列表可以轻松修改/扩展,而无需对代码进行任何更改。
全局定义的元素<meta:pageIds>
最好放在单独的XML文档中。这样就可以在不触及所有XSLT代码的情况下对其进行编辑。