P
Prabh
Hello all,
I want to HTML-ize an .xml (Test.xml) file and am running into a
problem with my XSL file.
The .xml contains info about each tag, called 'targets' and each
target has a message with certain priority. I want to bundle all these
targets in a top-area which have "a href" links to the details section
down below. Also, I want to ignore messages with 'debug' priority and
print only the 'info' priority messages.
Test.xml:
==========================X M L==================================
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="Test.xsl"?>
<main>
<target name="TargetOne">
<task>
<message priority="info"><![CDATA[Info about Target One]]></message>
</task>
</target>
<target name="TargetTwo">
<task>
<message priority="debug"><![CDATA[Info about Target Two: Ideally I
shouldnt be displayed!!]]></message>
</task>
</target>
<target name="TargetThree">
<task>
<message priority="info"><![CDATA[Info about Target Three]]>
</message>
</task>
</target>
</main>
==========================X M L==================================
I've gotten this far with my .xsl:
==========================X S L==================================
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xslutput method="html" indent="yes"/>
<xsl:template match="main">
<html>
<body>
<!-- make header links -->
<xsl:for-each select="target">
<xsl:if test="@name='TargetOne'
or @name='TargetTwo'
or @name='TargetThree'">
<a href="#{generate-id()}"> <xsl:value-of select="@name"/>
</a>
<br/>
</xsl:if>
</xsl:for-each>
<hr/>
<!-- show the targets, tasks and messages -->
<xsl:apply-templates select="target"/>
</body>
</html>
</xsl:template>
<xsl:template match="target">
<xsl:if test="@name='TargetOne'
or @name='TargetTwo'
or @name='TargetThree'">
<a name="{generate-id()}"/>
</xsl:if>
<h4>
<xsl:text>Target: </xsl:text>
<xsl:value-of select="@name"/>
</h4>
<!-- show the messages -->
<xsl:apply-templates select="task"/>
</xsl:template>
</xsl:stylesheet>
==========================X S L==================================
I can now print the desired HTML with targets bundled up in a top-area
with links to details down below. But, I'm unable to ignore/discard
the 'debug' messages. I'm trying to use '<xsl:template
match="message[@priority] != 'debug'
but it doesn seem to work, the Target Two is always being printed.
Could anyone give me pointers on how to go about this, please?
Thanks for your time,
Prabh
I want to HTML-ize an .xml (Test.xml) file and am running into a
problem with my XSL file.
The .xml contains info about each tag, called 'targets' and each
target has a message with certain priority. I want to bundle all these
targets in a top-area which have "a href" links to the details section
down below. Also, I want to ignore messages with 'debug' priority and
print only the 'info' priority messages.
Test.xml:
==========================X M L==================================
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="Test.xsl"?>
<main>
<target name="TargetOne">
<task>
<message priority="info"><![CDATA[Info about Target One]]></message>
</task>
</target>
<target name="TargetTwo">
<task>
<message priority="debug"><![CDATA[Info about Target Two: Ideally I
shouldnt be displayed!!]]></message>
</task>
</target>
<target name="TargetThree">
<task>
<message priority="info"><![CDATA[Info about Target Three]]>
</message>
</task>
</target>
</main>
==========================X M L==================================
I've gotten this far with my .xsl:
==========================X S L==================================
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xslutput method="html" indent="yes"/>
<xsl:template match="main">
<html>
<body>
<!-- make header links -->
<xsl:for-each select="target">
<xsl:if test="@name='TargetOne'
or @name='TargetTwo'
or @name='TargetThree'">
<a href="#{generate-id()}"> <xsl:value-of select="@name"/>
</a>
<br/>
</xsl:if>
</xsl:for-each>
<hr/>
<!-- show the targets, tasks and messages -->
<xsl:apply-templates select="target"/>
</body>
</html>
</xsl:template>
<xsl:template match="target">
<xsl:if test="@name='TargetOne'
or @name='TargetTwo'
or @name='TargetThree'">
<a name="{generate-id()}"/>
</xsl:if>
<h4>
<xsl:text>Target: </xsl:text>
<xsl:value-of select="@name"/>
</h4>
<!-- show the messages -->
<xsl:apply-templates select="task"/>
</xsl:template>
</xsl:stylesheet>
==========================X S L==================================
I can now print the desired HTML with targets bundled up in a top-area
with links to details down below. But, I'm unable to ignore/discard
the 'debug' messages. I'm trying to use '<xsl:template
match="message[@priority] != 'debug'
but it doesn seem to work, the Target Two is always being printed.
Could anyone give me pointers on how to go about this, please?
Thanks for your time,
Prabh