Xml XSLT和重复div问题
迪米特-很棒的东西!您确定了xml模式和我的预期结果 我正在使用xslt片段将这些信息拉入页面。我通过xslt片段调用将PageID传递到xslt中。如何扩展此代码以处理传入的参数,以便显示来自xml的正确数据 这是一个片段示例Xml XSLT和重复div问题,xml,xslt,Xml,Xslt,迪米特-很棒的东西!您确定了xml模式和我的预期结果 我正在使用xslt片段将这些信息拉入页面。我通过xslt片段调用将PageID传递到xslt中。如何扩展此代码以处理传入的参数,以便显示来自xml的正确数据 这是一个片段示例 <% Dim mm_xsl20 As MM.XSLTransform = New MM.XSLTransform() mm_xsl20.setXML(Server.MapPath("/" & countryVar & "/"
<%
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>
>
>
>
我的问题是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>
<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>
>
当此转换应用于以下XML文档时:
<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>
<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>
p1
http://myUrl.com/p1/
新闻
p2
http://myUrl.com/p2/
国际的
p3
http://myUrl.com/p3/
欧洲
p4
http://myUrl.com/p4/
法国
生成所需的正确结果:
<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>
<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>
注意事项:
<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>
<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>
最好放在单独的XML文档中。这将允许编辑它,而无需触及所有XSLT代码<强>这里是我认为做这件事的好方法< /强>:
<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>
<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>
>
当此转换应用于以下XML文档时:
<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>
<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>
p1
http://myUrl.com/p1/
新闻
p2
http://myUrl.com/p2/
国际的
p3
http://myUrl.com/p3/
欧洲
p4
http://myUrl.com/p4/
法国
生成所需的正确结果:
<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>
<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>
注意事项:
<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>
<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>
最好放在单独的XML文档中。这将允许编辑它,而无需触及所有XSLT代码显示一些输入XML、实际输出和预期输出..好问题(+1)。请参阅我的答案,了解一个简短而通用的“真正的XSLT”解决方案,该解决方案消除了任何不必要的条件逻辑,并允许在页面列表中轻松修改,而无需更改所有XSLT代码。:)显示一些输入XML、实际输出和预期输出..好问题(+1)。请参阅我的答案,了解一个简短而通用的“真正的XSLT”解决方案,该解决方案消除了任何不必要的条件逻辑,并允许在页面列表中轻松修改,而无需更改所有XSLT代码。:)+1快,快。青年成就组织!另外,将
放在外部文档中的有用建议允许编译样式表,而无需知道元数据是否已扩展。+1更快,更快。青年成就组织!另外,将
放在外部文档中的有用建议允许编译样式表,而无需知道元数据是否已扩展。