xsl-list
[Top] [All Lists]

Re: [xsl] Comparing direct ancestors

2012-05-29 05:02:30
On Mon, May 28, 2012 at 7:27 PM, Spencer Tickner
<spencertickner(_at_)gmail(_dot_)com> wrote:
Hi Ihe,

Thanks for walking though the solution as I'm sure it will help
others. Amazingly my mindset was exactly the same as yours, trying the
XPath remove and replace before tearing some hair out an moving to the
key solution proposed by David.

As with any sample code I have run into a fringe scenario that has got
me thinking of the "context" that the "use" statement,, ummm, uses.
The fringe scenario comes up with nested allowable elements:

<?xml version="1.0"?>
<root>
       <change-begin/>
       <a>
               <p>Foo<change-end/></p>
       </a>
       <change-begin/>
       <b>
               <d>
                       <t>Bar</t>
               </d>
               <d>
                       <t>Foo <p>This</p> whatever</t>
               </d>
       </b>
       <change-end/>
       <p>Nothing <change-begin/>to worry<change-end/> about</p>
<!-- Fringe scenario -->
       <b>
               <d>
                       <t><change-begin/>This <p>and</p> <t>That</t> and 
<p>that and </p> a</t>
               </d>
       </b>
       <change-end/>
</root>

In the last case the key puts the <change-end/> in the wrong spot
(attributes added to show context:

Output: <t preceding="0" ancestor-self="1"><change-begin/>This <p
preceding="0" ancestor-self="2">and</p> <t preceding="1"
ancestor-self="2">That</t> and <p preceding="2" ancestor-self="2">that
and <change-end/></p> a</t>

Desired Output: <t preceding="0" ancestor-self="1"><change-begin/>This
<p preceding="0" ancestor-self="2">and</p> <t preceding="1"
ancestor-self="2">That</t> and <p preceding="2" ancestor-self="2">that
and </p> a<change-end/></t>


Here's another idea which might be a bit more robust.

Why not redefine the concept of an allowable element. Right now it's
p|t but it could be (refined p)|(refined t) or anything you want.
Define a key indexing the allowable elements.

Then change the cb and ce keys to anchor to one of the allowable
elements rather than p|t.

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--


<Prev in Thread] Current Thread [Next in Thread>