删除父元素而不删除childs-DOM

时间:2014-12-15 13:57:08

标签: java xml dom xml-parsing

必须将我的原始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>

在上面的代码中,我将root作为<ns0:EMessage>元素并将所有节点作为列表节点。通过创建一个从输入原始XML中提取值的新元素,将元素转换为所需的形式。但是作为i将</ns0:eventProperty>作为父。我不需要这个元素,所以基本上我需要删除这个父节点,这个父节点的子节点应该成为<ns0:EMessage>的子节点。我不需要触摸其他元素。

所需的输出

 <?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>

尽我所能。希望现在有所帮助。谢谢你提前

1 个答案:

答案 0 :(得分:2)

回答我自己的问题很奇怪。但最后我得到了逻辑和答案。

尽管将元素添加到<ns0:eventProperty>父元素,但应将新创建的元素直接添加到<ns0:EMessage>的根。

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