[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
At 2011-11-27 22:10 +0100, Heiko Niemann wrote:
I don't think the template needed is very verbose at all since you are limiting yourself to finding the one prefix that is found in the xsi:type= attribute:
T:\ftemp>type heiko.xml
<?xml version="1.0" encoding="UTF-8"?>
<a:elem
xmlns:a="example.com/ns/a"
xsi:type="nsc:foo"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:nsc="example.com/ns/sensitive"
xmlns:b="example.com/ns/b"
xmlns:c="example.com/ns/c"
xmlns:z="example.com/ns/z">info</a:elem>
T:\ftemp>xslt2 heiko.xml heiko.xsl
<?xml version="1.0" encoding="UTF-8"?><a:elem xmlns:a="example.com/ns/a" xmlns:nsc="example.com/ns/sensitive" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="nsc:foo"/>
T:\ftemp>type heiko.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="2.0">
I hope this helps. If there is no xsi:type attribute, then no copy of the namespace node is done.
. . . . . . . . Ken
Re: [xsl] Copying Namespace Nodes
Subject: Re: [xsl] Copying Namespace Nodes From: "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx> Date: Sun, 27 Nov 2011 16:43:58 -0500 |
At 2011-11-27 22:10 +0100, Heiko Niemann wrote:
I have an element I want to copy and in the source it looks like this:
<a:elem xmlns:a="example.com/ns/a" xsi:type="nsc:foo" xmlns:nsc="example.com/ns/sensitive" xmlns:b="example.com/ns/b" xmlns:c="example.com/ns/c" ... xmlns:z="example.com/ns/z">info</a:elem>
What I want to achieve at the same time:
1) Keep the namespace declaration for the namespace sensitive content of the xsi:type attribute (with prefix nsc).
2) Get rid of all namespace declarations that are not needed here (prefix b, c, ..., z) and that clutter up my result document.
If I use copy-of with copy-namespaces set to 'no' the declaration for namespace sensitive content will be lost. If I say 'yes' everything stays the same. So is there a short way I have not seen yet or is the solution some verbose template? :)
I don't think the template needed is very verbose at all since you are limiting yourself to finding the one prefix that is found in the xsi:type= attribute:
T:\ftemp>type heiko.xml
<?xml version="1.0" encoding="UTF-8"?>
<a:elem
xmlns:a="example.com/ns/a"
xsi:type="nsc:foo"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:nsc="example.com/ns/sensitive"
xmlns:b="example.com/ns/b"
xmlns:c="example.com/ns/c"
xmlns:z="example.com/ns/z">info</a:elem>
T:\ftemp>xslt2 heiko.xml heiko.xsl
<?xml version="1.0" encoding="UTF-8"?><a:elem xmlns:a="example.com/ns/a" xmlns:nsc="example.com/ns/sensitive" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="nsc:foo"/>
T:\ftemp>type heiko.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="2.0">
<xsl:template match="*"> <xsl:copy copy-namespaces="no"> <xsl:for-each select="@xsi:type"> <xsl:copy-of select="../namespace::*[name(.)=substring-before(current(),':')]"/> <xsl:copy/> </xsl:for-each> </xsl:copy> </xsl:template>
</xsl:stylesheet> T:\ftemp>
I hope this helps. If there is no xsi:type attribute, then no copy of the namespace node is done.
. . . . . . . . Ken
Thanks for help, Heiko
-- Contact us for world-wide XML consulting and instructor-led training Free 5-hour video lecture: XSLT/XPath 1.0 & 2.0 http://ude.my/t37DVX Crane Softwrights Ltd. http://www.CraneSoftwrights.com/s/ G. Ken Holman mailto:gkholman@xxxxxxxxxxxxxxxxxxxx Google+ profile: https://plus.google.com/116832879756988317389/about Legal business disclaimers: http://www.CraneSoftwrights.com/legal
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Copying Namespace Nodes, Dimitre Novatchev | Thread | [xsl] C# code and .NET libraries in, Faleńczyk Jakub |
Re: [xsl] Copying Namespace Nodes, Dimitre Novatchev | Date | [xsl] C# code and .NET libraries in, Faleńczyk Jakub |
Month |
Keywords