【问题标题】:How to remove an attribute from xml element?如何从 xml 元素中删除属性?
【发布时间】:2021-04-22 07:28:47
【问题描述】:

我正在使用 spring java 来解析一个 xml。

xml 包含以下元素:

 <component xmlns="">
      <nonXMLBody classCode="DOCBODY" moodCode="EVN">
         <text mediaType="application/pdf" representation="B64">zzz</text>
      </nonXMLBody>
 </component>

我需要删除属性xmlns=""

我有以下代码,但属性xmlns="" 仍然存在。

Document dom = null;
try {
                    dom = xmlDocBuilder.parse(inpSource);
                } catch (SAXException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
NodeList nodeComponent = dom.getElementsByTagName("component");
Element element = (Element) nodeComponent.item(0);
element.removeAttribute("xmlns");

【问题讨论】:

  • “没有运气”是对发生的事情以及为什么它没有达到您的期望的非常不准确的描述......
  • @GyroGearless 我的意思是xml就是这样。 xmlns 属性还在。
  • xmlns 是一个非常特殊的属性,用于定义XML命名空间xmlns=... 定义的未命名命名空间也适用于嵌套在给定元素内的所有元素。您是否尝试删除 XML 中 all 元素的命名空间?你知道 XML 中的命名空间是什么吗?你知道你在问什么吗?
  • @Andreas 我的文档中还有一个xmlns。但是,我只需要删除这个特定的。我正在创建一个 cda 患者摘要文档,验证器不接受 xmlns 用于 component 元素而不是嵌套元素。
  • 这意味着您需要重命名元素(componentnonXMLBodytext)。哦,太糟糕了,元素不能重命名。那么,您需要删除元素并使用正确的限定名称重新创建它们,同时保留所有其他属性和内容。这是很多工作。也许应该考虑修复创建 XML 的代码,以便一开始就做好。

标签: java xml spring


【解决方案1】:

根据@Andreas 评论和this 解决方案,我找到了我的解决方案。

正如我在上面的评论中设置的那样,我的 xml 文档开头还有另一个 xmlns 属性,即 xmlns="urn:hl7-org:v3"

因此,为了在创建新元素时在新元素中具有相同的命名空间,我使用以下代码:

Element root = dom.getDocumentElement();
Element componetEl = dom.createElement("component");
componetEl.setAttribute("xmlns", "urn:hl7-org:v3"); //this is the solution
root.appendChild(componetEl);
Element nonXMLBodyEl = dom.createElement("nonXMLBody");
nonXMLBodyEl.setAttribute("xmlns", "urn:hl7-org:v3"); //this is the solution
...
componetEl.appendChild(nonXMLBodyEl);
Element textEl = dom.createElement("text");
textEl.setAttribute("xmlns", "urn:hl7-org:v3"); //this is the solution
nonXMLBodyEl.appendChild(textEl);

...

因此,现在我生成的 xml 是:

<component>
      <nonXMLBody classCode="DOCBODY" moodCode="EVN">
         <text mediaType="application/pdf" representation="B64">zzz</text>
      </nonXMLBody>
 </component>

【讨论】:

    猜你喜欢
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 2017-04-16
    • 2016-09-18
    • 2013-09-22
    • 2016-01-22
    • 1970-01-01
    相关资源
    最近更新 更多