我有一个 xml 文件。它有这样的结构:
<?xml version='1.0' encoding='utf-8'?>
<tasks>
<task file_id="3406" cont_name="D:\Data\cont\con1.dat" cont_offset="596672" file_size="16209"/>
<task file_id="3608" cont_name="D:\Data\cont\con2.dat" cont_offset="39199605" file_size="101394"/>
<task file_id="13435" cont_name="D:\Data\cont\con3.dat" cont_offset="28936" file_size="14900"/>
</tasks>
我的任务是读取这个文件并获取属性值:
file_id
cont_name
cont_offset
file_size
为了阅读,我使用以下代码:
File task_xml = new File("D:"+File.separator+
"Data"+File.separator+
"task"+File.separator+
"task2.xml");
if(task_xml.exists()){
System.out.println("File exist");
}
DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
// Создается дерево DOM документа из файла
Document document = documentBuilder.parse(task_xml);
// Получаем корневой элемент
Node root = document.getDocumentElement();
System.out.println(root.getNodeName());
System.out.println(root.getNodeValue());
//Сохраняем все подэлементы корневого - т.е. task
NodeList tasks = root.getChildNodes();
//task равен null
//Проходим по всем подэлементам root
for (int i = 0; i < tasks.getLength(); i++) {
Node task = tasks.item(i);
System.out.println(task.getNodeName()); //Текущая строчка <task....>
//Сохранить все атрибуты этой строчки
NamedNodeMap taskMap = task.getAttributes();
//Пройтись по всем этим атрибутам
for (int k = 0; k < taskMap.getLength(); k++) {
Node curAtribute = taskMap.item(i);
System.out.println(curAtribute.getNodeName());
System.out.println(curAtribute.getNodeValue());
}
//Перейти а след.строчку <task ...>
} //Конец прохода по всем строчкам
我可以读取主要元素 - 根等于任务,如果我想得到它的孩子,那么就行了:
//Сохраняем все подэлементы корневого - т.е. task
NodeList tasks = root.getChildNodes();
tasks 为 null,就好像没有子元素一样。但是有几行:
<task file_id="3406" cont_name="D:\Data\cont\con1.dat" cont_offset="596672" file_size="16209"/>
<task file_id="3608" cont_name="D:\Data\cont\con2.dat" cont_offset="39199605" file_size="101394"/>
<task file_id="13435" cont_name="D:\Data\cont\con3.dat" cont_offset="28936" file_size="14900"/>
告诉我如何访问这些嵌套的字符串并获取它们的属性值?我寻找了如何应用它的方法,但没有找到合适的选择。或者,也许您首先需要另一种方式,请告诉我该怎么做,非常感谢您。
请参阅源代码示例中的注释 :)
为了解决类似的问题,可以使用 JDOM 库。
首先,让我们将依赖项添加到我们的 pom.xml 文件中:
然后我们将使用以下代码:
因此,可以访问元素并获得 3 个嵌套行,然后根据需要与它们交互。在我的示例中,我正在访问该行的属性。