使用 jdom 设置命名空间

发布于 2024-11-29 19:27:35 字数 1026 浏览 1 评论 0原文

我想在 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".

谁能告诉我为什么它不起作用,有没有办法解决这个问题?

谢谢哈儿

I would like have this format in xml:

<ns2: test xmlns="url" xmlns:ns2="url2" xmlns:ns3="url3">
....
</ns2: test>

I am using the following code:

    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);

If I set namespace with:

    vNewRootElement.setNamespace(ns3);

Then I get thi:s

    <ns2: test xmlns:ns2="url2" xmlns:ns3="url3"> ... </ns2: test> 
without the default namespace xmlns="url".

Can anybody tell me why it dosen't work and is there a way to solve this problem?

Thanks, haner

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

少钕鈤記 2024-12-06 19:27:35

以下行输出(到 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);

The following outputs (to 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);

    }
}

you need the line

   test.addNamespaceDeclaration(ns);
吝吻 2024-12-06 19:27:35

添加如下所示的命名空间:

val root = new Element("test", "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>

Add the namespace like this:

val root = new Element("test", "url")

this will output:

<test xmlns="url">

if you want child elements to also use the same namespace, do this when adding the element:

val msgHeader = new Element("body", test.getNamespace)

otherwise, the child element will have xmlns="" by default.

Sample code in 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)

this will output:

<test xmlns="url" xmlns:ns2="url2" attribute1="value1">
  <MessageHeader>  </MessageHeader>
  <StatusMessageBody> </StatusMessageBody>
</test>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文