XML.orgXML.org
FOCUS AREAS |XML-DEV |XML.org DAILY NEWSLINK |REGISTRY |RESOURCES |ABOUT
OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index]
Re: [xml-dev] 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@nag.co.uk>


> 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]


News | XML in Industry | Calendar | XML Registry
Marketplace | Resources | MyXML.org | Sponsors | Privacy Statement

Copyright 1993-2007 XML.org. This site is hosted by OASIS