Hi Georges and David,

I tried the code (I list at the end)  and I found no matter what I do, the 
namespace binding will eventually show up at the point that the data shows up.  
It is added as needed.  I'm trying to convert one xml to another xml with 
adding/changing some information.

I was thinking that the original raw data has this namespace binding at the top 
and I wanted to keep it, thinking about your question: "Why would you like to 
copy this namespace binding?" , I think you are right. The data will be 
correct, it is just where the namespace binding shows up.  Maybe I should not 
worry about keeping the namespace binding at the top.

Thanks a lot for all your suggestions.

Helen



xquery version "1.0-ml";

declare function local:add-ns-node($elem   as element(),
    $prefix as xs:string,  $ns-uri as xs:string  ) as element()
{
  element { QName($ns-uri, concat($prefix, ":x")) }{ $elem }/*
};


let $a := <article xmlns:m="http://www.w3.org/1998/Math/MathML"; 
xmlns="mynamespace">
<subnode>test</subnode>
<m:a>test mnode</m:a>
</article>

return
  element {fn:QName("mynamespace","article")}
  {
    $a/@*
    ,
(:
    for $subnode in $a/node()
    let $ns := fn:namespace-uri-from-QName(fn:node-name($subnode))
    return
      if($ns eq "http://www.w3.org/1998/Math/MathML";)
      then
        local:add-ns-node($subnode, "m", "http://www.w3.org/1998/Math/MathML";)
      else $subnode
:)
    $a/node()

  }




On Aug 28, 2010, at 8:03 AM, Florent Georges wrote:

> helen chen wrote:
> 
>  Hi,
> 
>> I missed the namespace definition in the original article node
>> xmlns:m="http://www.w3.org/1998/Math/MathML"; in my new article
>> node.  [...]  It looks like the $a/@* does not put the
>> namespace attribute there.
> 
>  Yes, even though they are serialized in a similar way, XDM
> defines attributes and namespaces as two very different beasts.
> 
>> How can I get all the attributes into my new node dynamically
>> so I know I didn't miss anything?
> 
>  If you really want to copy the in-scope bindings at some point,
> you should be able to define a function to do so, by using both
> fn:namespace-uri-for-prefix() and fn:in-scope-prefixes(), and the
> following trick:
> 
> http://fgeorges.blogspot.com/2006/08/add-namespace-node-to-element-in.html
> 
>  But maybe that's not what you really want to do.  Why would you
> like to copy this namespace binding?
> 
>  Regard,
> 
> -- 
> Florent Georges
> http://fgeorges.org/
> 
> 
> 
> 
> 
> _______________________________________________
> General mailing list
> [email protected]
> http://developer.marklogic.com/mailman/listinfo/general

_______________________________________________
General mailing list
[email protected]
http://developer.marklogic.com/mailman/listinfo/general

Reply via email to