I have a series of <entry> elements whose entire contents I want to wrap in a <p> element.
For example, here is before:
<entry>This is a raw entry that needs a p element.</entry>
Here is after:
<entry><p>Thi s is a raw entry that needs a p element.</p></entry>
I want to ignore <entry> elements that already have a top-level child, like this:
<entry><note> I don't want to add p to these.</note><entry>
I also want to ignore <entry> elements that just consist of a space, like this:
<entry> </entry>
With my stylesheet and XPath statement below, everything works fine. However, it doesn't handle elements like these, that also need to have their contents wrapped:
<entry>This contains a nested <note>child</note> and I need these wrapped as well.</entry>
I want to get this:
<entry><p>Thi s contains a nested <note>child</note> and I need these wrapped as well.</p></entry>
Any pointers or suggestions would be appreciated. Thank you very much.
Rick
For example, here is before:
<entry>This is a raw entry that needs a p element.</entry>
Here is after:
<entry><p>Thi s is a raw entry that needs a p element.</p></entry>
I want to ignore <entry> elements that already have a top-level child, like this:
<entry><note> I don't want to add p to these.</note><entry>
I also want to ignore <entry> elements that just consist of a space, like this:
<entry> </entry>
With my stylesheet and XPath statement below, everything works fine. However, it doesn't handle elements like these, that also need to have their contents wrapped:
<entry>This contains a nested <note>child</note> and I need these wrapped as well.</entry>
I want to get this:
<entry><p>Thi s contains a nested <note>child</note> and I need these wrapped as well.</p></entry>
Any pointers or suggestions would be appreciated. Thank you very much.
Rick
Code:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="//node()[parent::entry[not(*)][.!=' ']]">
<xsl:element name="p">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:element>
</xsl:template>
</xsl:stylesheet>