我有一个复杂的JDOM元素,如下面的(A),我需要像(B)那样改变结构,以便在JAXB上工作(使用现有的类, 我唯一能做的就是改变xml的结构,我能用JDOM api做到这一点吗?
由于我是java的初学者,对我来说很难,如果有人指出解决方案,那对我来说非常有帮助
<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>
<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>
答案 0 :(得分: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>
答案 1 :(得分:1)
查看xmls,这是两个完全不同的xmls。你需要构建一个类似于B dyanamically的xml结构。为此,以下链接将帮助你。
http://www.ibm.com/developerworks/java/library/j-jdom/
希望这会对你有所帮助。
答案 2 :(得分:1)
你多次问过基本相同的问题。
Remove XML attribute using JDOM API?
如果您还没有能够正确地解决上一个问题,那么在进行多元素移动之前,您需要退后一步并使用更多基本示例。
虽然我同意四十二,从长远来看,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内容的分离。
然后,当您想到这一点时,可以将其放入循环,扫描等中,以便您可以分离,并从文档层次结构中的其他位置重新添加内容。