【发布时间】: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>
在我上面的代码中,我将根作为<ns0:EMessage> 元素并将所有节点作为列表节点。通过创建一个具有从输入原始 XML 中提取的值的新元素,将元素转换为所需的形式。但正如我所采取的那样</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>
我已经尽力了。希望现在能有所帮助。在此先感谢
【问题讨论】:
-
你能展示你创建“
”节点的代码吗? -
@syllabusIt 没有创建该节点。实际上正在读取原始 XML,我已将子节点删除到 eventProperty 节点。但由于 eventProperty 是父节点,因此无法删除它并且它驻留在输出中XML也是。它与我想要的相反。那个eventProperty元素不应该出现在输出xml中,孩子应该成为根的孩子。谢谢
-
无论如何,请出示您的代码
-
@syllabus:它只是获取文本并创建一个新元素。基本上,如果您想提供解决方案,请作为 ROOT 和 Parent P1 以及 Child C1 和 C2。删除 P1 标签并制作 C1和 C2 作为 immideate 孩子。为什么我不发布代码在这里看起来很笨拙。
标签: java xml dom xml-parsing