[jdom-interest] XmlOutputter - printNamespace - NO_NAMESPACE outputs xmlns="", bug?

Bradley S. Huffman hip at csa.cs.okstate.edu
Wed Jul 2 14:41:01 PDT 2003


How did you create your "child" element? Bet you did

    // Puts child in no namespace
    Element childElement = new Element("child");
    // Add child to ele
    ele.addContent(childElement);

when what you really want is

   // Puts child in http://locahost/root namespace
    Element childElement = new Element("child", default);
    // Add child to ele
    ele.addContent(childElement);

Brad

John Jefferson writes:

> 
> Hi,
> 
> My problem is that when outputing xml some of the
> children of my document are given blank namespaces.
> 
> For instance <root> <child1 xmlns=""></child1></root>
> 
> The reason for this is in the method below and occurs
> because the namespace is NO_NAMESPACE but
> namespaces.getURI("") is not null.
> 
> This is bad because I set the default namespace of the
> root element to a value - the value of
> namespaces.getURI("") - but the children are then
> defined to be using a different namespace the xmlns of
> "".  
> 
> When I proceed to validate against a schema I find
> that it fails b/c it doesn't find the children
> belonging to the default namespace.
> 
> Am I doing something wrong or is there a bug?
> 
> Thanks,
> 
> MG
> 
> Here is a code snippet
> 
>         Namespace default =
> Namespace.getNamespace("http://locahost/root");
>         Namespace xsi = Namespace.getNamespace("xsi",
> "http://www.w3.org/2001/XMLSchema-instance");
>         Namespace custom =
> Namespace.getNamespace("custom",
> "http://www.custom.com/CUSTOM");
>         
>         String value = 
            "http://locahost/root "+
>             SCHEMA_LOCATION + "root.xsd " +
>             "http://www.custom.com/CUSTOM "+ 
>             SCHEMA_LOCATION + "custom.xsd";
>             
>         Attribute schemalocation = new
> Attribute("schemaLocation", value);         
>         schemalocation.setNamespace(xsi);
>         
>         //add the following namespaces declarations
>         ele.addNamespaceDeclaration(xsi);
>         ele.addNamespaceDeclaration(custom);
>         //set the namespace
>         ele.setNamespace(default);
>         ele.setAttribute(schemalocation);
> 
>             StringWriter sw = new StringWriter();
>             XMLOutputter xmlOutputter = new
> XMLOutputter("\t", true);
>             xmlOutputter.setOmitDeclaration(true);
>             xmlOutputter.setLineSeparator("\n");
>             xmlOutputter.setTextNormalize(false);
>             xmlOutputter.setTextTrim(false);
>             String output =
> xmlOutputter.outputString(ele);
>             
>             sw.write(output);
>             sw.write("\n");
> 
> What I end up with is then:
> 
> <root xmlns="http://localhost/root"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xmlns:custom="http://www.custom.com/CUSTOM"
> xsi:schemaLocation="http://localhost/root root.xsd
> http://www.custom.com/CUSTOM custom.xsd">
> 	<child1 xmlns="">
> 	</child1>
> </root>
> 
> where the child1 element above is the problem.  
> 
> <xmloutputter method jdom 9>
> 
>     private void printElementNamespace(Element
> element, Writer out,  NamespaceStack namespaces)
>                              throws IOException {
>         // Add namespace decl only if it's not the XML
> namespace and it's
>         // not the NO_NAMESPACE with the prefix "" not
> yet mapped
>         // (we do output xmlns="" if the "" prefix was
> already used and we
>         // need to reclaim it for the NO_NAMESPACE)
>         Namespace ns = element.getNamespace();
>         if (ns == Namespace.XML_NAMESPACE) {
>             return;
>         }
>         if ( !((ns == Namespace.NO_NAMESPACE) &&
>                (namespaces.getURI("") == null))) {
>             printNamespace(ns, out, namespaces);
>         }
>     }
> 
> __________________________________
> Do you Yahoo!?
> The New Yahoo! Search - Faster. Easier. Bingo.
> http://search.yahoo.com
> _______________________________________________
> To control your jdom-interest membership:
> http://lists.denveronline.net/mailman/options/jdom-interest/youraddr@yourhost
> .com



More information about the jdom-interest mailing list