0

以下は、xmlファイルを読み取るためのメインコードです。System.out.println(node)は1.5および1.6でnullを返します。バグを再現するためのサンプルプログラムを投稿しています。コードの後に​​、xmlも同じように配置しました。コードとxmlはjdk1.4で正常に機能しますが、上記のバージョンに変更するとnullが返されます。

public class Main
{        
    private static Document document;

    public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException
    {
        File xmlfile = new File("D:\\utility_1341173385278.xml");

        parseXMLFile(xmlfile);
        getNodes(getRootNode(), "DIR");
    }

    public static void parseXMLFile(File file) throws ParserConfigurationException, SAXException, IOException
    {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        document = db.parse(file);
    }

    // get root node in xml

    public static  Node getRootNode()
    {
        return document.getDocumentElement();
    }

    // To get nodes in xml file starting from root node and prints all nodes which starts with given name.....

    public static List getNodes(Node parent, String nodeName)
    {
        List newList = new ArrayList();

        NodeList list = parent.getChildNodes();
        if (list != null)
        {
            for (int i = 0; i < list.getLength(); i++)
            {
                Node node = list.item(i);
                System.out.println(node);
                if (node.getNodeName().equals(nodeName))
                {
                    newList.add(node);
                }
            }
        }

        list = null;

        return newList;
    }
}

xmlファイルにはDIR、DATABASE、およびFILEタグが付いています

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <DATABASE data="" name="Test" path="file:/D:/Java/bu%2077/Test/utility/">
        <DIR last_mod_date="1341058205411" name="utility" status="unchanged">
            <DIR last_mod_date="1341058205445" name="bs90" status="unchanged">
                <DIR last_mod_date="1341058205699" name=".r280" status="unchanged">
                    <DIR last_mod_date="1341058205756" name="0093" status="unchanged">
                        <FILE last_mod_date="1340873680000" name="c2c1f5f1.000004b6" size="3360" status="unchanged"/>
                        <FILE last_mod_date="1340873680000" name="c7c1f0f1.00000cba" size="3440" status="unchanged"/>
                    </DIR>
                 </DIR>
                <FILE last_mod_date="1340957268000" name="New Text Document.txt" size="5" status="unchanged"/>
            </DIR>
        </DIR>
    </DATABASE>

これを1.4と1.5の両方で実行しました。以下は1.4の出力です。

            <DIR last_mod_date="1341058205411" name="utility" status="unchanged">
                <DIR last_mod_date="1341058205445" name="bs90" status="unchanged">
                    <DIR last_mod_date="1341058205699" name=".r280" status="unchanged">
                        <DIR last_mod_date="1341058205756" name="0093" status="unchanged">
                            <FILE last_mod_date="1340873680000" name="c2c1f5f1.000004b6" size="3360" status="unchanged"/>
                            <FILE last_mod_date="1340873680000" name="c7c1f0f1.00000cba" size="3440" status="unchanged"/>
                        </DIR>
                     </DIR>
                    <FILE last_mod_date="1340957268000" name="New Text Document.txt" size="5" status="unchanged"/>
                </DIR>
            </DIR>


****************************************
output in 1.5

[#text: 
    ]
[DIR: null]
[#text: 
]
[#text: 
    ]
[DIR: null]
[#text: 
]
[#text: 
        ]
4

2 に答える 2

0

そのため、toString() の実装を変更しました。なんでそこに頼るの?

独自の Node ラッパーを作成して toString() をオーバーライドするか、関心のあるプロパティを取得します。

于 2012-07-25T10:39:39.520 に答える