【问题标题】:Remove the Parent Element without removing the childs-DOM删除父元素而不删除 childs-DOM
【发布时间】:2014-12-15 13:57:07
【问题描述】:

必须将我的原始 XML 转换为我的应用程序可以理解的所需 XML。

使用 DOM(以它为限制),不幸的是我只能使用 Java,DOM。已经尝试过 XSLT,但不幸的是不允许使用它。

输入:

<?xml version="1.0" encoding="UTF-8" standalone="no"?><ns0:EMessage xmlns:ns0="http://www.abc/Something">
        <ns0:Header>
        <ns0:Snumber>1613</ns0:Snumber>
        </ns0:Header>
        <ns0:Name>SomeEvent</ns0:Name>
        <ns0:NameSpace>http://www.abc/Something.xsd</ns0:NameSpace>
        <ns0:Id>3</ns0:Id>
        <ns0:myProperty>
          <ns0:Name>ExtId</ns0:Name>
          <ns0:Value>TEST_ID_12</ns0:Value>
        </ns0:myProperty>
        <ns0:myProperty>
          <ns0:Name>CVersion</ns0:Name>
          <ns0:Value>0</ns0:Value>
        </ns0:myProperty>
        </ns0:EMessage>

到目前为止,通过我的试验和谷歌,我已经到达这里。

<?xml version="1.0" encoding="UTF-8" standalone="no"?><ns0:EMessage xmlns:ns0="http://www.abc/Something">
<ns0:Header>
<ns0:Snumber>1613</ns0:Snumber>
</ns0:Header>
<ns0:Name>SomeEvent</ns0:Name>
<ns0:NameSpace>http://www.abc/Something.xsd</ns0:NameSpace>
<ns0:Id>3</ns0:Id>
<ns0:eventProperty>
    <ExtId>TEST_ID_12</ExtId>
  </ns0:eventProperty>
  <ns0:eventProperty>
    <CVersion>0</CVersion>
  </ns0:eventProperty>
</ns0:EMessage>

在我上面的代码中,我将根作为&lt;ns0:EMessage&gt; 元素并将所有节点作为列表节点。通过创建一个具有从输入原始 XML 中提取的值的新元素,将元素转换为所需的形式。但正如我所采取的那样&lt;/ns0:eventProperty&gt;作为父节点。我不需要这个元素,所以基本上我需要删除这个父节点,这个父节点的子节点应该成为&lt;ns0:EMessage&gt;的直接子节点。我不需要接触其他元素。

所需的输出

 <?xml version="1.0" encoding="UTF-8" standalone="no"?><ns0:EMessage xmlns:ns0="http://www.abc/Something">
    <ns0:Header>
    <ns0:Snumber>161003</ns0:Snumber>
    </ns0:Header>
    <ns0:Name>SomeEvent</ns0:Name>
    <ns0:NameSpace>http://www.abc/Something.xsd</ns0:NameSpace>
    <ns0:Id>3</ns0:Id>
     <ExtId>TEST_ID_12</ExtId>
     <CVersion>0</CVersion>
    </ns0:EMessage>

我已经尽力了。希望现在能有所帮助。在此先感谢

【问题讨论】:

  • 你能展示你创建“”节点的代码吗?
  • @syllabusIt 没有创建该节点。实际上正在读取原始 XML,我已将子节点删除到 eventProperty 节点。但由于 eventProperty 是父节点,因此无法删除它并且它驻留在输出中XML也是。它与我想要的相反。那个eventProperty元素不应该出现在输出xml中,孩子应该成为根的孩子。谢谢
  • 无论如何,请出示您的代码
  • @syllabus:它只是获取文本并创建一个新元素。基本上,如果您想提供解决方案,请作为 ROOT 和 Parent P1 以及 Child C1 和 C2。删除 P1 标签并制作 C1和 C2 作为 immideate 孩子。为什么我不发布代码在这里看起来很笨拙。

标签: java xml dom xml-parsing


【解决方案1】:

回答我自己的问题很奇怪。但我终于明白了这个问题的逻辑和答案。

尽管将元素添加到 &lt;ns0:eventProperty&gt; 父级,应该将新创建的元素直接添加到根,即 &lt;ns0:EMessage&gt;。

注意::整个过程将在一个循环中完成。使用当前父级并使用数据通过执行root.appendChild(newChildElement) 来创建直接子级,然后在同一个循环中进行为所有子元素运行将删除当前父逻辑放在 END 中。这样,一旦创建了新元素,只需删除当前父元素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-05
    • 2022-12-31
    • 1970-01-01
    • 2013-01-17
    • 2019-02-21
    • 1970-01-01
    • 2013-07-18
    • 2017-05-10
    相关资源
    最近更新 更多