Subject:Help with retrieving inner node text Author:N T Date:08 Sep 2005 02:29 PM
Hello, I am trying to write an XSL for the following XML data:
<NEWS>
<ITEM id="1">
<BODY>
<SECTION TYPE="Content">
<PARA>Some text content <innernode att="ABC"/> Some more text</PARA>
<PARA>Some text content. No innernode. Some more text</PARA>
</SECTION>
</BODY>
</ITEM>
<ITEM id="2">
<BODY>
<SECTION TYPE="Content">
<PARA>Some text content Some more text <innernode att="XYZ"/> other text</PARA>
<PARA>Some text content. No innernode. <innernode2/> Some more text</PARA>
</SECTION>
</BODY>
</ITEM>
</NEWS>
Basically, I need to display PARA text as is, but need to replace innernode based on the attribute att with some text. Example of innernode being a anchor tag with href as attribute and I need to replace that with a regular "a" tag. I need to also delete innernode2 from displaying.
Also, I had to jump through hoops in the XSL to get to the ITEM that needs to be displayed. The id of the item is passed as a param and need to display the article based on that.
Here's what I came up with so far, but isn't working:
1) It isn't replacing the innernode tag in-line.
2) There must be a better way to do this like calling apply-templates and replacing innernode and eliminating innernode2. I am not able to come up with it though.
Any help is greatly appreciated.
Subject:Help with retrieving inner node text Author:N T Date:21 Sep 2005 04:13 PM
Thanks a lot Tony. This does get me in the right direction. However, I have a small problem.
The following code:
<xsl:template match="node()">
<xsl:element name="{local-name(.)}">
<xsl:copy-of select="@*"/>
<xsl:apply-templates select="child::*"/>
</xsl:element>
</xsl:template>
<xsl:template match="innernode">
<xsl:if test="@att = 'ABC'">
<new-abc-node/>
</xsl:if>
<xsl:if test="@att = 'XYZ'">
<new-xyz-node/>
</xsl:if>
</xsl:template>
does not work as I expect. I mean, for the following PARA tag,
<PARA>Some text content <innernode att="ABC"/> Some more text</PARA>,
it prints
<PARA>Para 1 Some text content Some more text
<new-abc-node/>
</PARA>
But I need the text to be inline, meaning the new-abc-node needs to be positioned between the 2 text nodes. This is what I expect
<PARA>Para 1 Some text content <new-abc-node/> Some more text
</PARA>