我对xslt很新,需要一些特定代码的帮助 我有一个XML文件: `
<in:inputs xmlns:in="http://www.composite.net/ns/transformation/input/1.0">
<!-- Function Call Result (0 ms), XPath /in:inputs/in:result[@name='SitemapXml']/Page-->
<in:result name="SitemapXml">
<Page MenuTitle="Frontpage" UrlTitle="Home" FolderPath="/Home" Depth="1" xmlns="">
<Page Depth="2" />
<Page MenuTitle="Treadmills Reviews" UrlTitle="Treadmills-Reviews" Description="" FolderPath="/Home/Treadmills-Reviews" Depth="2" isopen="true" iscurrent="true" >
<Page MenuTitle="Sole Fitness" UrlTitle="Sole-Fitness" Description="" FolderPath="/Home/Treadmills-Reviews/Sole-Fitness" Depth="3">
<Page MenuTitle="F-Series" UrlTitle="F-Series" Description="" FolderPath="/Home/Treadmills-Reviews/Sole-Fitness/F-Series" Depth="4">
<Page MenuTitle="F63" UrlTitle="F63" Description="" FolderPath="/Home/Treadmills-Reviews/Sole-Fitness/F-Series/F63" Depth="5" />
</Page>
</Page>
<Page MenuTitle="Nordic Track" UrlTitle="Nordic-Track" Description="" FolderPath="/Home/Treadmills-Reviews/Nordic-Track" Depth="3"/>
</Page>
<Page MenuTitle="Our Top Picks" UrlTitle="Our-Top-Picks" Description="" FolderPath="/Home/Our-Top-Picks" Depth="2"/>
<Page MenuTitle="Forums" UrlTitle="Forums" Description="" FolderPath="/Home/Forums" Depth="2"/>
</Page>
</in:result>
`
我试图用xslt横向节点,然后打印出“iscurrent ='true'”节点的“MenuTitle”的值。可以有任意数量级别的“页面”节点以及iscurrent属性将在哪个页面当前打开。
我的xslt文件如下 `
<xsl:template match="/">
<html>
<head>
</head>
<body>
<span>
<xsl:apply-templates mode="HeaderName" select="."/>
</span>
</body>
</html>
</xsl:template>
<xsl:template mode="HeaderName" match="*">
<xsl:if test="@iscurrent='true'">
<xsl:value-of select="@MenuTilte" />
</xsl:if>
</xsl:template>
</xsl:stylesheet>`
如果不是一切,我做错了什么?
提前致谢。
答案 0 :(得分:0)
这个转变:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:in="http://www.composite.net/ns/transformation/input/1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="in:result">
<xsl:apply-templates select="//Page[@iscurrent = 'true']"/>
</xsl:template>
<xsl:template match="Page">
<xsl:message terminate="no">
<xsl:value-of select="@MenuTitle"/>
</xsl:message>
</xsl:template>
</xsl:stylesheet>
当应用于你输入的.xml文件时,我认为它有一些格式错误,即注释不正确,因为它注释整个.xml并且有两个根元素(我推荐了第一个)
将输出消息:
[xslt] Treadmills Reviews
当然,在您的情况下,您必须使用属性的值,或者在任何情况下做一些适合您需要的事情。
关于你的xslt。确保使用正确的命名空间,并在apply templates元素中选择正确的节点。
以上xsl仅用于测试目的。将输出更改为html并删除消息元素。你最终会得到这样的结论:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:in="http://www.composite.net/ns/transformation/input/1.0">
<xsl:output method="html" indent="yes"/>
<xsl:template match="in:result">
<html>
<head>
<title>Test</title>
</head>
<body>
<span>
<xsl:apply-templates select="//Page[@iscurrent = 'true']"/>
</span>
</body>
</html>
</xsl:template>
<xsl:template match="Page">
<xsl:value-of select="@MenuTitle"/>
</xsl:template>
</xsl:stylesheet>