3

私は Java や XML があまり得意ではないということから始めましょう。

以下にあるのは、必要に応じて子ノードを出力するコードです。私はコードを書きませんでした。ヘルプ サイトのJava XML Exampleで見つけました。今、私がする必要があるのは、すべての特異性の痕跡を取り除くことです. つまり、「TITLE」や「CD」を検索したくないので、最初のノードが何であるかを調べて印刷したいのです。つまり、最初が CD の場合、すべてのノードに対して CD を出力する必要があります。これを複数の XML ファイルに使用する予定ですが、どれも同じではありません。そのため、特定の XML に限定せず、引用符を使用することが重要です。

最後に出力として必要なものの全体像を示すために、基本的には CSV ファイルです。カンマで区切られた上部のヘッダーと、カンマで区切られたその下のコンテンツ。これを機能させるには、ヘッダーの上部にあるすべてのノードを一覧表示する print メソッドも必要です。これを行う方法がわかりません。

編集: 私の質問は、ハードコーディングせずにタグ名 (例: タイトル) を印刷するにはどうすればよいかということです。たとえば、CD や音楽とは関係のない XML ファイルでも動作するようにしたいと考えています。

//This should be the final result:
Title, Artist, Album,
On Fire, Eminem, Recovery,
Not Afraid, Eminem, Recovery,

//I want this code without hardcoding headers like Title inside it. 
Element fstElmnt = (Element) fstNode;
NodeList fstNmElmntLst = fstElmnt.getElementsByTagName("TITLE");
Element fstNmElmnt = (Element) fstNmElmntLst.item(0);
NodeList fstNm = fstNmElmnt.getChildNodes();
System.out.print(((Node) fstNm.item(0)).getNodeValue()+", ");
4

2 に答える 2

1

答えは問題です。を使用getChildNodes()して、返されたリストのノードを反復処理します。ノードごとに、を使用して要素であるかどうかを確認できます

if (node.getNodeType() == Node.ELEMENT_NODE)

そして、trueの場合、次を使用して要素のタグ名を取得できます

Element element = (Element) node; 
String elementName = element.getTagName();
于 2013-02-09T13:57:42.667 に答える
1

完全に要素名に依存しないコード:

boolean titlePrinted = false;
Element root = doc.getDocumentElement();
NodeList cdNodes = root.getChildNodes();
for (int i = 0; i < cdNodes.getLength(); i++) {
    Node cdNode = cdNodes.item(i);
    if (cdNode.getNodeType() == Node.ELEMENT_NODE) {
        NodeList cdAttrNodes = cdNode.getChildNodes();
        if (!titlePrinted) {
            for (int j = 0; j < cdAttrNodes.getLength(); j++) {
                Node cdAttrNode = cdAttrNodes.item(j);
                // add this if statement
                if (cdAttrNode.getNodeType() == Node.ELEMENT_NODE) {
                    System.out.print(cdAttrNode.getNodeName() + ",");
                }
            }
            System.out.println("");
            titlePrinted = true;
        }
        for (int j = 0; j < cdAttrNodes.getLength(); j++) {
            Node cdAttrNode = cdAttrNodes.item(j);
            if (cdAttrNode.getNodeType() == Node.ELEMENT_NODE) {
                NodeList attrNodes = cdAttrNode.getChildNodes();
                for (int k = 0; k < attrNodes.getLength(); k++) {
                    Node attrNode = attrNodes.item(k);
                    if (attrNode.getNodeType() == Node.TEXT_NODE) {
                        System.out.print(attrNode.getNodeValue() + ",");
                    }
                }
            }
        }
        System.out.println("");
    }
}

あなたの提案でテストされ.xmlました。私のソリューションは、要素ではなくノードを使用して独立しています。

于 2013-02-09T14:09:53.590 に答える