0

こんにちは、XML 入力ファイルの構造を知らずに XML 入力ファイルを解析し、コンマ区切り値で値を出力する一般的なコードを Java で作成しました。したがって、XML ドキュメントに次のようなものがあるとしましょう。

<Employee>
    <Name>XYZ</Name>
    <Id>123</Id> 
    <Address>
         <Office_Address>office address here</Office_Address>
    </Address>
</Employee>

したがって、私のJavaコードは上記のxmlファイルを次のようにコンマ区切りの値に解析します。

Employee (File 1):  Name , ID
Address (File 2):  Office_Address

つまり、ネストされた要素ごとに、子ノードに等しい列を持つ新しい csv ファイルが出力されます。

したがって、これは正常に機能していますが、問題は次のとおりです。上記のXMLファイルを次のように使用できます。

 <Employee>
    <Name>XYZ</Name>
    <Id>123</Id> 
    <Address/>
</Employee>

したがって、この場合、私の汎用 Java コードがこのファイルを処理すると、次のように出力されます。

Employee (File 1) : Name, Id, Address

そのため、2 つの出力ファイルの代わりに 1 つを取得し、ファイル 1 には 2 つではなく 3 つのエントリが含まれることがあります。したがって、ネストされている場合、Java コードはそれに対応する新しいコンマ区切りを作成しますが、ネストされていない場合は、1 つのファイルのみを出力します。

この要素のロジックをハードコーディングすることで、この問題を解決できます。しかし、私の Java 汎用 XML 構文解析コードには意味がないので、そうしたくありません。

だから私の質問は、同じソースから生成された XML ファイル内の要素がネストされ、時にはフラットとして存在する可能性があることを理解できる方法です。XSD またはその他の方法の使用。いろいろ調べてみましたが、さっぱりわかりません。

事前に感謝し、解決策またはいくつかの良い提案を得ることを望んでいます.

4

2 に答える 2

1

これは、Address 要素が入れ子になっている場合とフラットな場合があるために発生します。

その発言は正しくありません。Address は引き続き Employee 要素の下にネストされています。2 番目のケースでは、単に空です。汎用コードで「空の」要素 (子のない Address 要素) をテストできる場合、この問題は解決できます。

于 2013-05-06T16:22:24.970 に答える
1

xsd がある場合は、xsd ファイルを解析して、ネストされた要素をサポートする要素を特定できます。

xsdがない場合は、基本的にxmlファイル全体を一度解析して、可能なすべてのネストを決定する必要があります(つまり、基本的にxmlファイルを調べて独自のxsdを構築しています)。最初のパスで得た知識に基づいて最終結果を出力します。

于 2013-05-06T16:59:32.687 に答える