以下は、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:
]