| Subject: [xsl] [xslt] Problem changing a contained element to a following element From: <email@xxxxxxxx> Date: Fri, 27 Jun 2003 14:23:34 -0500 | 
Hi,
I didn't think of myself as an XSLT newbie, but this problem sure is making
me feel like one.
All I want to do is to change:
<p>some text
    <ul>
      <li><p>item1</p>
      <li><p>item1</p>
   </ul>
</p>
to:
<p>some text</p>
<ul>
   <li><p>item1</p>
   <li><p>item1</p>
</ul>
I don't want <p> to contain <ul>.  The <p> must end before the <ul> begins.
I run the following with Xalan Java 2.2.0:
<?xml version="1.0"?>
<xsl:transform
		xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
		xmlns:xalan="http://xml.apache.org/xslt"
		version="1.0">
<xsl:output method="xml" encoding="UTF-8"/>
<xsl:template match="contents">
	<contents-corrected>
		<xsl:apply-templates/>
	</contents-corrected>
</xsl:template>
<xsl:template match="p">
	<p-unchanged>
		<xsl:apply-templates/>
	</p-unchanged>
</xsl:template>
<!--
*
*	A paragraph that contains an unordered list should be changed into a
paragraph
*	*followed* by an unordered list.
*
-->
<xsl:template match="p[child::ul]">
	<p-corrected>
		<xsl:apply-templates select="node()[not(ul)]"/>
	</p-corrected>
	<xsl:apply-templates select="ul"/>
</xsl:template>
<xsl:template match="ul | li">
	<xsl:copy-of select="."/>
</xsl:template>
</xsl:transform>
With this input XML:
<?xml version="1.0" encoding="UTF-8"?>
<snippet>
	<contents>
		<p>The likelihood of achieving an accumulation goal is affected by these
factors:
			<ul>
				<li>
					<p>Inflation of goal-related costs</p>
				</li>
				<li>
					<p>The original amount invested</p>
				</li>
				<li>
					<p>The rate of return on invested assets</p>
				</li>
			</ul>
		</p>
		<p>Consequently, a calculation showing the need for additional resources
to achieve your accumulation goal will be directly affected by changes in
any of these factors.
		</p>
	</contents>
</snippet>
And I get this result:
<?xml version="1.0" encoding="UTF-8"?>
	<contents-corrected>
		<p-corrected>The likelihood of achieving an accumulation goal is affected
by these factors:
			<ul>
				<li>
					<p>Inflation of goal-related costs</p>
				</li>
				<li>
					<p>The original amount invested</p>
				</li>
				<li>
					<p>The rate of return on invested assets</p>
				</li>
			</ul>
		</p-corrected><ul>
				<li>
					<p>Inflation of goal-related costs</p>
				</li>
				<li>
					<p>The original amount invested</p>
				</li>
				<li>
					<p>The rate of return on invested assets</p>
				</li>
			</ul>
		<p-unchanged>Consequently, a calculation showing the need for additional
resources to achieve your accumulation goal will be directly affected by
changes in any of these factors.
		</p-unchanged>
	</contents-corrected>
I am confounded as to why the <ul> comes out twice due to this template:
<xsl:template match="p[child::ul]">
	<p-corrected>
		<xsl:apply-templates select="node()[not(ul)]"/>
	</p-corrected>
	<xsl:apply-templates select="ul"/>
</xsl:template>
I'm hoping I'm missing something obvious and that someone here can find it
easily.  Thanks!
. . . Phil
 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
| Current Thread | 
|---|
| 
 | 
| <- Previous | Index | Next -> | 
|---|---|---|
| [xsl] Re: XML Merge, David Carver | Thread | Re: [xsl] [xslt] Problem changing a, Wendell Piez | 
| RE: [xsl] Different Colors for Alte, Schwartz, Rechell R, | Date | Re: [xsl] XSLT model not "natural"?, Wendell Piez | 
| Month |