1

次のような複雑なJDOM要素があります(A)、JAXBで作業するために(B)のような構造を変更する必要があります(既存のクラスで使用する場合、私にできることは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 を見ると、これらは 2 つのまったく異なる xml です。動的に B に似た xml 構造を構築する必要があります。これには、次のリンクが役立ちます。

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

これがあなたを助けることを願っています。

于 2012-05-10T07:54:35.360 に答える
1

あなたは本質的に同じ質問を何度もしています。

JDOM APIを使用してXML属性を削除しますか?

XML の解析に関する問題

これまでの質問をまだ正しく理解できていない場合は、一歩下がって、より基本的な例に取り組んでから、複数の要素の移動を行う必要があります。

長期的には XSL の方が優れたソリューションになるという 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 に答える