java – Dom4j xmlns属性
发布时间:2020-12-15 08:44:24 所属栏目:Java 来源:网络整理
导读:我想仅将xmlns属性添加到根节点,但是当我向根元素添加命名空间时,所有后续子元素也会获得相同的xmlns属性.如何将xmlns属性添加到单个节点但不添加任何子节点? 码: public String toXml() { Document document = DocumentHelper.createDocument(); Element
我想仅将xmlns属性添加到根节点,但是当我向根元素添加命名空间时,所有后续子元素也会获得相同的xmlns属性.如何将xmlns属性添加到单个节点但不添加任何子节点?
码: public String toXml() { Document document = DocumentHelper.createDocument(); Element documentRoot = document.addElement("ResponseMessage"); documentRoot.addNamespace("",getXmlNamespace()) .addAttribute("xmlns:xsi",getXmlNamespaceSchemaInstance()) .addAttribute("xsi:schemaLocation",getXmlSchemaLocation()) .addAttribute("id",super.getId()); Element header = documentRoot.addElement("Header"); buildHeader(header); Element body = documentRoot.addElement("Body"); buildProperties(body); body.addElement("StatusMessage").addText(this.getStatusMessage().getMessage()); return document.asXML(); } 解决方法
好的,新答案.
如果希望元素属于某个命名空间,请确保在该命名空间中创建它们.使用具有Qname作为其参数之一的方法.如果您创建一个没有命名空间的元素,DOM4J将不得不添加命名空间声明以适应您的(不情愿的)规范. 您的示例略有编辑.我没有使用QName,但给每个元素命名空间uri: public static String toXml() { Document document = DocumentHelper.createDocument(); Element documentRoot = document.addElement("ResponseMessage",getXmlNamespace()); documentRoot.addAttribute(QName.get("schemaLocation","xsi","xsi-ns"),"schema.xsd").addAttribute("id","4711"); Element header = documentRoot.addElement("Header"); Element body = documentRoot.addElement("Body",getXmlNamespace()); // buildProperties(body); body.addElement("StatusMessage",getXmlNamespace()).addText("status"); return document.asXML(); } private static String getXmlNamespace() { return "xyzzy"; } public static void main(String[] args) throws Exception { System.out.println(toXml()); } 产生输出: <?xml version="1.0" encoding="UTF-8"?> <ResponseMessage xmlns="xyzzy" xmlns:xsi="xsi-ns" xsi:schemaLocation="schema.xsd" id="4711"> <Header/><Body><StatusMessage>status</StatusMessage></Body> </ResponseMessage> 更新2: 另请注意,我更改了schemaLocation属性的声明方式.您真的永远不必手动管理命名空间声明 – 这将由库来处理. 但是,有一种情况是添加名称空间延迟可能很有用:如果您有一个主要包含名称空间X元素的文档,并且在文档中展开了一些带有namspace Y的子元素,则在根目录中声明了一个名称绑定Y element,可以在子元素中保存大量重复的名称空间声明. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |