[XML-DEV Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: How to 'invert' an Xpath statement please

  • From: "Rens Duijsens" <rens.duijsens@g...>
  • To: "David Carlisle" <davidc@n...>
  • Date: Wed, 27 Aug 2008 15:47:26 +0200

Re:  How to 'invert' an Xpath statement please
Hello David,
 
Partialy right. :-)
 
I do not want just text().

For instance:
See the next example:

Pattern: /ROOT[@pattern='test']
Match:   //NODE/ELEMENT
Value:    text()

PATTERN button
Now.. The user can click op ExecutePattern and the file will look like this:
(Gray means --- Outside the pattern. Green means --- Inside the pattern)
 
<?xml version="1.0"?>
<ROOT pattern="test">
  <ELEMENT>Element 1</ELEMENT>
  <NODE>
    <ELEMENT>Element 1</ELEMENT>
    <ELEMENT>Element 2</ELEMENT>
  </NODE>
  <NODE>
    <ELEMENT>Element 1</ELEMENT>
    <ELEMENT>Element 2</ELEMENT>
  </NODE>
</ROOT>
Works fine. :-)

MATCH Button
The user can click on ExcuteMatch:
And the file SHOULD change to:
<?xml version="1.0"?>
<ROOT pattern="test">
  <ELEMENT>Element 1</ELEMENT>
  <NODE>
    <ELEMENT>Element 1</ELEMENT>
    <ELEMENT>Element 2</ELEMENT>
  </NODE>
  <NODE>
    <ELEMENT>Element 1</ELEMENT>
    <ELEMENT>Element 2</ELEMENT>
  </NODE>
</ROOT>

However. Sadly it looks like:
<?xml version="1.0"?>
<ROOT pattern="test">
  <ELEMENT>Element 1</ELEMENT>
  <NODE>
    <ELEMENT>Element 1</ELEMENT>
    <ELEMENT>Element 2</ELEMENT>
  </NODE>
  <NODE>
    <ELEMENT>Element 1</ELEMENT>
    <ELEMENT>Element 2</ELEMENT>
  </NODE>
</ROOT>
Due to the wrong search item, the first ELEMENT is allso colored blue.
VALUE Button
And the user can click on ExecuteValue.
The file should change to:
<?xml version="1.0"?>
<ROOT pattern="test">
  <ELEMENT>Element 1</ELEMENT>
  <NODE>
    <ELEMENT>Element 1</ELEMENT>
    <ELEMENT>Element 2</ELEMENT>
  </NODE>
  <NODE>
    <ELEMENT>Element 1</ELEMENT>
    <ELEMENT>Element 2</ELEMENT>
  </NODE>
</ROOT>
The Result window should show:
Element 1
Element 2
Element 1
Element 2


And again... The file looks wrongly, due to the incorrect search statement, like:
<?xml version="1.0"?>
<ROOT pattern="test">
  <ELEMENT>Element 1</ELEMENT>
  <NODE>
    <ELEMENT>Element 1</ELEMENT>
    <ELEMENT>Element 2</ELEMENT>
  </NODE>
  <NODE>
    <ELEMENT>Element 1</ELEMENT>
    <ELEMENT>Element 2</ELEMENT>
  </NODE>
</ROOT>
The result window shows the correct data, so the xpath statement works correct.
It's just the highlighting that gives me headeggs.

Just for the record..... Change the data on line 2 to <ELEMENT>Element 0</ELEMENT> and all works fine offcause!
I have to know WHERE the selected data starts.
In this case, the data to highlight starts on line 5 and 6 and 9 and 10.
Not on line 2.
And I THINK I can do that by knowing wich data NOT so highlight.
But maybe, there is an other way.

So.... If there is an other way to determin the position, than would that be great to.
If a combination xpath/xslt gives me a solution, than please.....gimme.... :-)
If it means, I have to learn to knit and origamy. Fine by me. I need a solution. :-)

The only way I see now, is for me to write my own xpath/xslt parser.
And that would absolutely not bee my first choise.
 
Friendly greetings
Rens Duijsens
The Netherlands
 
 
 
2008/8/27 David Carlisle <davidc@n...>


> So, I want to know which data is NOT part of my selection, so I can skip the
> highlighting for the first one.

by data you seem to mean text, so for example to find all text nodes
that are not children of an element selected by //NODE/ELEMENT you could
do
//text()[not(parent::ELEMENT/parent::NODE)]

but that doesn't look particularly efficient and in general inverting
NODE/ELEMENT to parent::ELEMENT/parent::NODE may not be trivial.

In xpath2 you could write


//text() except //NODE/ELEMENT/text()

but I'd guess you don't have xpath2 available.

the normal way of writing except in xpath1 is to use generate-id() but
that's an xslt extension to the xpath functions, and it seems that you
want a pure xpath solution not xslt.

David


________________________________________________________________________
The Numerical Algorithms Group Ltd is a company registered in England
and Wales with company number 1249803. The registered office is:
Wilkinson House, Jordan Hill Road, Oxford OX2 8DR, United Kingdom.

This e-mail has been scanned for all viruses by Star. The service is
powered by MessageLabs.
________________________________________________________________________



[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index]


PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
 

Stylus Studio has published XML-DEV in RSS and ATOM formats, enabling users to easily subcribe to the list from their preferred news reader application.


Stylus Studio Sponsored Links are added links designed to provide related and additional information to the visitors of this website. they were not included by the author in the initial post. To view the content without the Sponsor Links please click here.

Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.