【问题标题】:Retain default namespace on appending child element在附加子元素上保留默认命名空间
【发布时间】:2017-12-07 09:59:33
【问题描述】:

我有以下 XML 文档:

<?xml version="1.0" encoding="UTF-8"?>
<parent xmlns="urn:parent:ns:1.0"/>

我想出了如何使用so 将 XML 字符串转换为元素并将其附加到现有元素。

过程如下:

String text = "<child></child>";
Document document = builder.parse(new InputSource(new 
    StringReader(text)));
Element element = document.getDocumentElement();
Element importedNode = (Element) parent.importNode(element, true);
parent.getDocumentElement().appendChild(importedNode);

这会产生:

<?xml version="1.0" encoding="UTF-8"?>
<parent xmlns="urn:parent:ns:1.0">
    <child xmlns=""/>
</parent>

子元素清除其默认命名空间,我想从父元素“继承”命名空间(在本例中为 urn:parent:ns:1.0)。

如果解决方案只使用用于 XML 的 JRE API,而不使用第三方库(例如 dom4j 等),那将是更好的选择

【问题讨论】:

  • 作为旁注,我不想编辑子 XML 文本,例如在里面硬编码父命名空间,然后进行解析。

标签: java xml xml-parsing


【解决方案1】:

这个解决方案的灵感来自so:

String text = "<child></child>";
Document document = builder.parse(new InputSource(new 
    StringReader(text)));
Element originalElement = document.getDocumentElement();

Element newDocumentElement = 
    document.createElementNS("urn:parent:ns:1.0", 
    originalElement.getNodeName());

// no child elements, otherwise append all children to 
// newDocumentElement

Element importedNode = (Element) parent.importNode(newDocumentElement, 
    true);    
parent.getDocumentElement().appendChild(importedNode);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-03
    • 2016-11-25
    • 2013-11-16
    • 2015-02-11
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    相关资源
    最近更新 更多