Home. 
.

transparent

transparent

transparent

Altova Mailing List Archives


Re: more XPath struggles (tDOM)

From: pointsman@---.--- (---- ---)
To: NULL
Date: 5/6/2008 10:38:00 AM

Mikhail Teterin wrote:
>Joseph J. Kesselman wrote:
>> XPath is namespace-aware. To select a namespaced node, you must use a
>> prefix in your path (which you did) and tell your XPath evaluator what
>> the prefix bound to (which you didn't). Look at the user's manual for
>> your tool.
>
>Thanks. After I explicitly set:
>
> $xml selectNodesNamespaces {mp MarketParameters xc XmlCache}

That's the right way to bind prefixes to a namespace. One way. You can
always use the -namespaces option to the selectNodes method, but
setting things up with one selectNodesNamespaces call for the rest of
the lifetime of the document seems to be more convenient to me.

>I got some progress... But the namespaces are defined in the document itself
>-- for example:
>
> <xc:XmlCache xmlns:xc="XmlCache" xc:action="Update">
>
>why do I still need to specify them? It certainly works with xml_grep... Is
>there a bug in the package (tDOM), or is the above element not sufficient
>to define a namespace?

No, it's not a bug. As long as no selectNodesNamespaces setting nor
the -namespaces option is given, tDOM even respects the XML namespace
declarations of the document. The context node of your XPath
expression is the node, from which you call your XPath expression. If
the (all) prefixes, you're using in your XPath expression are in scope
of that node, you've to do nothing; namespace resolving will work as
you expect. Since you had trouble with this, I'd bet, not all used
XML namespace declarations are in scope of your context node.

But, as others already have pointed out, it is _dangerous_ to bank on
the prefixes in the document. Prefixes don't matter, it's the
namespaces, that matters.

From the XML viewpoint,

<a:doc xmlns:a="http://foo.bar.com">
  <a:elem>data</a:elem>
</a:doc>

and 

<b:doc xmlns:b="http://foo.bar.com">
  <b:elem>data</a:elem>
</b:doc>

are the in some sense the 'same' documents. 

You can't just say [$someNode selectNodes a:elem] in your code and
expect that to work reliable. If the document provider uses another
prefix (bound to the same namespace), your code will fail.

The clear way out is, to say the XPath engine, which namespace you
mean with which prefix. With e.g. selectNodesNamespaces.

rolf


transparent
Print
Mail
Digg
delicious
Disclaimer
.

These Archives are provided for informational purposes only and have been generated directly from the Altova mailing list archive system and are comprised of the lists set forth on www.altova.com/list/index.html. Therefore, Altova does not warrant or guarantee the accuracy, reliability, completeness, usefulness, non-infringement of intellectual property rights, or quality of any content on the Altova Mailing List Archive(s), regardless of who originates that content. You expressly understand and agree that you bear all risks associated with using or relying on that content. Altova will not be liable or responsible in any way for any content posted including, but not limited to, any errors or omissions in content, or for any losses or damage of any kind incurred as a result of the use of or reliance on any content. This disclaimer and limitation on liability is in addition to the disclaimers and limitations contained in the Website Terms of Use and elsewhere on the site.

.
.

transparent

transparent