1

我有一个复杂的 JDOM 元素,如下 (A),我需要更改 (B) 的结构,以便处理 JAXB(使用已经存在的类,我唯一​​能做的就是更改 xml 的结构),我能使用 JDOM api 来做到这一点?

由于我是java初学者,这对我来说非常困难,如果有人指出解决方案,这对我很有帮助

现有元素 (A)

<DETAILS>
    <ROWSET name="OPTIONS">
       <ROW num="1">
          <Uniqueno>1000</Uniqueno>
          <ROWSET name="SUSPENCE">
             <ROW num="1">
                <Uniqueno>1001</Uniqueno>
                <ROWSET name="PERSONS">
                   <ROW num="1">
                     <Name>60821894</Name>
                     <Age>44</Age>
                   </ROW>
                   <ROW num="2">
                      <Name>60821894</Name>
                      <Age>44</Age>
                   </ROW>
                </ROWSET>
                <ROWSET name="PERSONS">
                   <ROW num="1">
                     <Name>60821894</Name>
                     <Age>55</Age>
                   </ROW>
                   <ROW num="2">
                      <Name>60821894</Name>
                      <Age>55</Age>
                   </ROW>
                   <ROW num="3">
                      <Name>60821894</Name>
                      <Age>55</Age>
                   </ROW>
                </ROWSET>
             </ROW>
          </ROWSET>
       </ROW>
    </ROWSET>
 </DETAILS>

所需元素 (B)

<DETAILS>
    <OPTIONS>
          <Uniqueno>1000</Uniqueno>
          <SUSPENCE>
                <Uniqueno>1001</Uniqueno>
                <PERSONS>
                     <Name>60821894</Name>
                     <Age>44</Age>
                     <Name>60821894</Name>
                     <Age>44</Age>
                </PERSONS>
                <PERSONS>
                     <Name>60821894</Name>
                     <Age>55</Age>
                     <Name>60821894</Name>
                     <Age>55</Age>
                     <Name>60821894</Name>
                     <Age>55</Age>
                </PERSONS>
          </SUSPENCE>
    </OPTIONS>
 </DETAILS>
4

3 回答 3

2

我可以建议改用 XSLT。容易得多。从这样的事情开始

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="DETAILS/ROWSET[@name='OPTIONS']">
    <DETAILS>
        <OPTIONS>
            <xsl:apply-templates />
        </OPTIONS>
    </DETAILS>
</xsl:template>

<xsl:template match="ROW">
        <xsl:apply-templates />
</xsl:template>

<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()" />
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>
于 2012-05-10T14:34:20.060 回答
1

查看xml,这是两个完全不同的xml。您需要动态构建类似于B的xml结构。为此,以下链接将为您提供帮助。

http://www.ibm.com/developerworks/java/library/j-jdom/

希望这会帮助你。

于 2012-05-10T07:54:35.360 回答
1

您已经多次问过基本相同的问题。

使用 JDOM API 删除 XML 属性?

解析 XML 中的问题

如果您还不能正确回答前面的问题,您需要退后一步,使用更基本的示例,然后再开始进行多元素移动。

虽然我同意 42 点的观点,即从长远来看 XSL 将是一个更好的解决方案,但我认为您还没有处于可以使事情变得更容易(对您而言)的地方。如果您的数据中有可用的 JDOM 元素,您应该找出您的 Java 调试器,并在添加和删除元素时检查它们。您需要“玩”一点,以更好地理解 Java、XML 和 JDOM 的工作原理。现在你在问一大堆相关的问题,这些问题表明对什么是“基础”概念存在基本的误解。在处理这些更复杂的概念之前,您需要打好这些基础。

不如从简单的开始:

XMLOutputter xout = new XMLOutputter(Format.getPrettyFormat());
Document doc = new Document();
Element root = new Element("DETAILS");
doc.addContent(root);

xout.output(System.out, doc);

Element row = new Element("ROW");
root.addContent(row);

xout.output(System.out, doc);

row.detach();
xout.output(System.out, doc);

您可以使用上面的内容来查看如何添加内容以及如何从 JDOM 内容中分离内容。

然后,当你弄清楚了,你可以把它放在循环、扫描等中,这样你就可以从文档层次结构的其他地方分离和重新添加内容。

于 2012-05-10T15:37:04.880 回答