我想在xml中使用这种格式:
<ns2: test xmlns="url" xmlns:ns2="url2" xmlns:ns3="url3">
....
</ns2: test>
我使用以下代码:
Namespace ns= Namespace.getNamespace("url");
Namespace ns2 = Namespace.getNamespace("ns2", "url2");
Namespace ns3= Namespace.getNamespace("ns3", "url3");
SAXBuilder vDocBuilder = new SAXBuilder();
Document vDocument = vDocBuilder.build(File);
System.out.println("Root element " + vDocument.getRootElement().getName());
org.jdom.Element test = new org.jdom.Element("test", ns);
vDocument.setRootElement(test);
vNewRootElement.addNamespaceDeclaration(ns2);
vNewRootElement.addNamespaceDeclaration(ns3);
如果我将命名空间设置为:
vNewRootElement.setNamespace(ns3);
然后我得到了::s
<ns2: test xmlns:ns2="url2" xmlns:ns3="url3"> ... </ns2: test>
without the default namespace xmlns="url".
有人可以告诉我它为什么不起作用,有没有办法解决这个问题?
谢谢,haner
答案 0 :(得分:8)
以下输出(至System.out)
<?xml version="1.0" encoding="UTF-8"?>
<ns2:test xmlns:ns2="url2" xmlns="url" xmlns:ns3="url3">Some text</ns2:test>
import java.io.IOException;
import org.jdom.Document;
import org.jdom.JDOMException;
import org.jdom.Namespace;
import org.jdom.output.XMLOutputter;
public class Test {
public static void main(String args[]) throws JDOMException, IOException {
Namespace ns = Namespace.getNamespace("url");
Namespace ns2 = Namespace.getNamespace("ns2", "url2");
Namespace ns3 = Namespace.getNamespace("ns3", "url3");
Document vDocument = new Document();
org.jdom.Element test = new org.jdom.Element("test", ns2);
vDocument.setRootElement(test);
//add "url" default namespace
test.addNamespaceDeclaration(ns);
test.addNamespaceDeclaration(ns2);
test.addNamespaceDeclaration(ns3);
test.addContent("Some text");
//dump output to System.out
XMLOutputter xo = new XMLOutputter();
xo.output(vDocument, System.out);
}
}
你需要一行
test.addNamespaceDeclaration(ns);
答案 1 :(得分:0)
添加这样的名称空间:
val root = new Element("test", "url")
这将输出:
<test xmlns="url">
如果您希望子元素也使用相同的名称空间,请在添加元素时执行以下操作:
val msgHeader = new Element("body", test.getNamespace)
否则,默认情况下,子元素将具有xmlns =“”。
Scala中的示例代码:
import org.jdom.output.{Format, XMLOutputter}
import org.jdom.{Document, Element, Namespace}
val doc = new Document()
//Root Element
val root = new Element("test", "url")
val ns2 = Namespace.getNamespace("ns2", "url2")
root.addNamespaceDeclaration(ns2)
root.setAttribute("attribute1", "value1")
val xmlHeader = new Element("MessageHeader", root.getNamespace)
val xmlBody = new Element("MessageBody", root.getNamespace)
root.addContent(xmlHeader)
root.addContent(msgBody)
doc.setRootElement(root)
这将输出:
<test xmlns="url" xmlns:ns2="url2" attribute1="value1">
<MessageHeader> </MessageHeader>
<StatusMessageBody> </StatusMessageBody>
</test>