[Xmltask-users] RE:Problem with namespaces in output document.
Brought to you by:
bagnew
From: Nate P. <npa...@no...> - 2006-04-21 17:57:12
|
Update on this: From playing around a bit more, it seems the following holds true: 1) Just adding an xmlns attribute to a node does not make it belong to that namespace (how does one set the namespace on inserted nodes then)?. 2) Using an existing document with a namespace declaration, and doing nothing more than writing it out using the outputter="simple" adds a few superfluous namespace declarations, for example _NS1: __NS1:. 3) Not using the outputter="simple" solves my original problem (the unwanted presence of xmlns="" on any node I insert using the text body of the insert sub-task), but makes the output hard to read as the inserted nodes are not indented. So, is this a bug in in the 'simple' outputter? Is there a way to have my cake and eat it too? I want properly behaving namespaces AND a well formatted document. Thanks again. --------------------- Hello all, I hope someone can help with this. I have a document with a namespace in a buffer, I try to add some nodes to it with the insert sub-task of xmltask, but when the document is later written, the nodes I inserted have an attribute of xmlns="" which seems to explicitly declare NO namespace. I don't want the xmlns to show up at all, resulting in the nodes I inserted having the same namespace as the parent node. The source document (one in the buffer) looks something like: <portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"> <portlet> <portlet-name>SomePortlet</portlet-name> ..... </portlet> </portlet-app> Here is the code snippet that does the insert: <xmltask sourcebuffer="${frag_tmp}" destbuffer="${frag_tmp}" failWithoutMatch="true" report="false"> <insert path="/:portlet-app/:portlet/:portlet-name" position="before"> <![CDATA[<description xml:lang="${lang}">${portlet.description}</description>]]> </insert> </xmltask> This produces: <portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"> <portlet> <description xmlns="" xml:lang="xx">Some Description</description> <portlet-name>SomePortlet</portlet-name> ..... </portlet> </portlet-app> I also tried inserting an xmlns attribute explicitly matching the parent document like this: <insert path="/:portlet-app/:portlet/:portlet-name" position="before"> <![CDATA[<description xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd" xml:lang="${lang}">${portlet.description}</description>]]> </insert> but then I end up with this, which fails validation: <portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"> <portlet> <description __NS1:xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd" xmlns:__NS1="http://www.w3.org/2000/xmlns/" xml:lang="xx">Some Description</description> <portlet-name>SomePortlet</portlet-name> ..... </portlet> </portlet-app> Is there some trick to getting the text nodes that I insert to assume the parent node's namespace? Thank you in advance for any ideas. |