[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