Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > XML > XML an identical copy using XSLT

Reply
Thread Tools

XML an identical copy using XSLT

 
 
kluge.wolfram@googlemail.com
Guest
Posts: n/a
 
      05-20-2008
Hi,

i get stucked on a transformation problem using XSLT. What i need is
to copy an XML Tree to an output XML without any automatic changes.
Since i used <xsl:copy> or <xsl:copy-of> there occur unwanted side
effects.
For example i just copied a xml were several namespace declarations
are present more than one time. Then
the transformation do remove the declaration at the child nodes.
Another funny automatism is - if i remove a node
which holds a namespace declaration the first child is inheriting its
declaration.

Thank you for your support,

Im looking forward to hearing from yoou soon.

Wolfram
 
Reply With Quote
 
 
 
 
Martin Honnen
Guest
Posts: n/a
 
      05-20-2008
http://www.velocityreviews.com/forums/(E-Mail Removed) wrote:

> i get stucked on a transformation problem using XSLT. What i need is
> to copy an XML Tree to an output XML without any automatic changes.
> Since i used <xsl:copy> or <xsl:copy-of> there occur unwanted side
> effects.
> For example i just copied a xml were several namespace declarations
> are present more than one time. Then
> the transformation do remove the declaration at the child nodes.
> Another funny automatism is - if i remove a node
> which holds a namespace declaration the first child is inheriting its
> declaration.


If you have e.g.
<foo xmlns="http://example.com/2008/ns1">
<bar>
<baz/>
</bar>
</foo>
then all three elements are in the namespace
http://example.com/2008/ns1. Consequently if you copy the bar element
without its foo parent then the serializer has to add a xmlns
declaration to make sure the copied element is still in its namespace.

In the XSLT/XPath 1.0 data model there are namespace nodes which are in
scope for element nodes. And xsl:copy http://www.w3.org/TR/xslt#copying
copies these namespace nodes.
With XSLT 2.0 http://www.w3.org/TR/xslt20/#shallow-copy you can specify
whether namespaces are copied but for the namespace of the element
itself that would not prevent the copying of its namespace. If you want
to strip the namespace of an element then you can't use xsl:copy,
instead you need to create a new element e.g.

<xsl:template match="pf1:bar"
xmlnsf1="http://example.com/2008/ns1">

<xsl:element name="{local-name()}">
<xsl:apply-templates select="@* | node()"/>
</xsl:element>

</xsl:template>
--

Martin Honnen
http://JavaScript.FAQTs.com/
 
Reply With Quote
 
 
 
 
kluge.wolfram@googlemail.com
Guest
Posts: n/a
 
      05-20-2008
On 20 Mai, 13:09, Martin Honnen <(E-Mail Removed)> wrote:
> (E-Mail Removed) wrote:
> > i get stucked on a transformation problem using XSLT. What i need is
> > to copy an XML Tree to an output XML without any automatic changes.
> > Since i used <xsl:copy> or <xsl:copy-of> there occur unwanted side
> > effects.
> > For example i just copied a xml were several namespace declarations
> > are present more than one time. Then
> > the transformation do remove the declaration at the child nodes.
> > Another funny automatism is - if i remove a node
> > which holds a namespace declaration the first child is inheriting its
> > declaration.

>
> If you have e.g.
> * *<foo xmlns="http://example.com/2008/ns1">
> * * *<bar>
> * * * *<baz/>
> * * *</bar>
> * *</foo>
> then all three elements are in the namespacehttp://example.com/2008/ns1. Consequently if you copy the bar element
> without its foo parent then the serializer has to add a xmlns
> declaration to make sure the copied element is still in its namespace.
>
> In the XSLT/XPath 1.0 data model there are namespace nodes which are in
> scope for element nodes. And xsl:copyhttp://www.w3.org/TR/xslt#copying
> copies these namespace nodes.
> With XSLT 2.0http://www.w3.org/TR/xslt20/#shallow-copyyou can specify
> whether namespaces are copied but for the namespace of the element
> itself that would not prevent the copying of its namespace. If you want
> to strip the namespace of an element then you can't use xsl:copy,
> instead you need to create a new element e.g.
>
> * *<xsl:template match="pf1:bar"
> * * *xmlnsf1="http://example.com/2008/ns1">
>
> * * *<xsl:element name="{local-name()}">
> * * * *<xsl:apply-templates select="@* | node()"/>
> * * *</xsl:element>
>
> * *</xsl:template>
> --
>
> * * * * Martin Honnen
> * * * *http://JavaScript.FAQTs.com/


What i want is the following,

<ds:foo xmlns:ds="http://example.com/2008/ns1">
<ds:bar>
<ds:baz/>
</ds:bar>
</ds:foo>

if i copy the node list ds:bar and ignore <ds:foo> then ds:bar gets
the declaration of foo.

<ds:bar xmlns:ds="http://example.com/2008/ns1">
<ds:baz/>
</ds:bar>

this is unwanted and i would like to omit this.

second behavior is ....

<ds:foo xmlns:ds="http://example.com/2008/ns1">
<ds:bar xmlns:ds="http://example.com/2008/ns1>
<ds:baz/>
</ds:bar>
</ds:foo>

and i copy the hole structure the result looks like shown below

<ds:foo xmlns:ds="http://example.com/2008/ns1">
<ds:bar>
<ds:baz/>
</ds:bar>
</ds:foo>

but this arent the exact copies of there sources.

Thank You for Help

Wolfram


 
Reply With Quote
 
Martin Honnen
Guest
Posts: n/a
 
      05-20-2008
(E-Mail Removed) wrote:

> What i want is the following,
>
> <ds:foo xmlns:ds="http://example.com/2008/ns1">
> <ds:bar>
> <ds:baz/>
> </ds:bar>
> </ds:foo>
>
> if i copy the node list ds:bar and ignore <ds:foo> then ds:bar gets
> the declaration of foo.
>
> <ds:bar xmlns:ds="http://example.com/2008/ns1">
> <ds:baz/>
> </ds:bar>
>
> this is unwanted and i would like to omit this.


What exactly do you want to omit? As said, if you want to strip the
namespace of an element node then use
<xsl:template match="ds:*"
xmlns:ds="http://example.com/2008/ns1">

<xsl:element name="{local-name()}">
<xsl:apply-templates select="@* | node()"/>
</xsl:element>

</xsl:template>


> but this arent the exact copies of there sources.


XSLT does not work with the source code, it works on the XSLT/XPath data
model.

--

Martin Honnen
http://JavaScript.FAQTs.com/
 
Reply With Quote
 
Ken Starks
Guest
Posts: n/a
 
      05-20-2008
What happens if you try the following? which is actually
equivalent as far as the __expanded__ namespaces are
concerned:


<ds:foo xmlns:ds="http://example.com/2008/ns1">
<xyz:bar xmlnsyz="http://example.com/2008/ns1>
<ds:baz/>
</xyz:bar>
</ds:foo>



(E-Mail Removed) wrote:

>
> <ds:foo xmlns:ds="http://example.com/2008/ns1">
> <ds:bar xmlns:ds="http://example.com/2008/ns1>
> <ds:baz/>
> </ds:bar>
> </ds:foo>
>
> and i copy the hole structure the result looks like shown below
>
> <ds:foo xmlns:ds="http://example.com/2008/ns1">
> <ds:bar>
> <ds:baz/>
> </ds:bar>
> </ds:foo>
>
> but this arent the exact copies of there sources.
>
> Thank You for Help
>
> Wolfram
>
>

 
Reply With Quote
 
kluge.wolfram@googlemail.com
Guest
Posts: n/a
 
      05-20-2008
On 20 Mai, 14:19, Ken Starks <(E-Mail Removed)> wrote:
> What happens if you try the following? which is actually
> equivalent as far as the __expanded__ namespaces are
> concerned:
>
> <ds:foo xmlns:ds="http://example.com/2008/ns1">
> * <xyz:bar xmlnsyz="http://example.com/2008/ns1>
> * * * * <ds:baz/>
> * </xyz:bar>
> </ds:foo>
>
>
>
> (E-Mail Removed) wrote:
>
> > <ds:foo xmlns:ds="http://example.com/2008/ns1">
> > * *<ds:bar xmlns:ds="http://example.com/2008/ns1>
> > * * * <ds:baz/>
> > * *</ds:bar>
> > </ds:foo>

>
> > and i copy the hole structure the result looks like shown below

>
> > <ds:foo xmlns:ds="http://example.com/2008/ns1">
> > * *<ds:bar>
> > * * * <ds:baz/>
> > * *</ds:bar>
> > </ds:foo>

>
> > but this arent the exact copies of there sources.

>
> > Thank You for Help

>
> > Wolfram- Zitierten Text ausblenden -

>
> - Zitierten Text anzeigen -


Hi Ken

this works

> <ds:foo xmlns:ds="http://example.com/2008/ns1">
> <xyz:bar xmlnsyz="http://example.com/2008/ns1>
> <ds:baz/>
> </xyz:bar>
> </ds:foo>


i think the reason why it works it the new namspace prefix.
But what is going on if redundant namespace declarations occurs.

Thanks

Wolfram
 
Reply With Quote
 
Ken Starks
Guest
Posts: n/a
 
      05-20-2008

>
> Hi Ken
>
> this works
>
>> <ds:foo xmlns:ds="http://example.com/2008/ns1">
>> <xyz:bar xmlnsyz="http://example.com/2008/ns1>
>> <ds:baz/>
>> </xyz:bar>
>> </ds:foo>

>
> i think the reason why it works it the new namspace prefix.
> But what is going on if redundant namespace declarations occurs.
>
> Thanks
>
> Wolfram


I believe the xslt processor is allowed to do its own
thing, in the case of redundant namespaces, but
I can't say I've read the specifications and seen
it in black and white.
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Identical Item in Cut/Copy/Paste Jason Cavett Java 2 04-20-2007 03:13 PM
Problem to insert an XML-element by XSLT-converting from one XML-file into another XML-file jkflens XML 2 05-30-2006 09:41 AM
Including XSLT/XML document within a XSLT document dar_imiro@hotmail.com XML 4 12-13-2005 02:26 AM
Hardisk copy Identical Bluesky Computer Support 7 10-27-2004 11:17 PM
ANN: New low-cost XML Editor, XSLT Editor, XSLT Debugger, DTD/Schema Editor Stylus Studio Java 0 08-03-2004 03:53 PM



Advertisments