XSLT横向和选择

时间:2011-10-07 18:03:57

标签: xslt

我对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>`

如果不是一切,我做错了什么?

提前致谢。

1 个答案:

答案 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>