使用Java解析XML文件

时间:2015-08-03 23:45:27

标签: java xml

我有一个XML文件,我试图使用Java进行搜索。我需要通过其attribut值(端口号)找到一个元素,并返回该元素的依赖描述。

已知端口的xml文件应在线托管,并具有以下架构:

<ports>
    <record>
        <number></number>
        <name></name>
        <protocol></protocol>
        <description></description>
    </record>
    <record>
        <number></number>
        <name></name>
        <protocol></protocol>
        <description></description>
    </record>
    <record>
        <number></number>
        <name></name>
        <protocol></protocol>
        <description></description>
    </record>
    <record>
        <number></number>
        <name></name>
        <protocol></protocol>
        <description></description>
    </record>
</ports>

元素没有唯一标识符。在我的应用程序中,我想调用一个带有数字作为参数的函数,并且它应该给出具有给定属性“number”的项目的描述。

我的问题是,它是所有已知端口的列表,我无法手动编辑结构,以使用portnumber作为属性分配所有元素。任何人都可以告诉我如何解决这个问题吗?

提前致谢

更新:我想像get_port(int portno)一样搜索它。这就是我的代码

import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class DOMExampleJava {

    public static void main(String args[]) {

        try {

            File input = new File("input.xml");
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(input);
            doc.getDocumentElement().normalize();

            NodeList nodes = doc.getElementsByTagName("record");
            System.out.println("==========================");

                for (int i = 0; i < nodes.getLength(); i++) {
                Node node = nodes.item(i);

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

                        Element element = (Element) node;
                        System.out.println("Port number: " + getValue("number", element));
                        System.out.println("Protocol: " + getValue("protocol", element));
                        System.out.println("Description: " + getValue("description", element));

                    }

                }

        } catch (Exception ex) {

            ex.printStackTrace();

        }

    }

    private static String getValue(String tag, Element element) {

        NodeList nodes = element.getElementsByTagName(tag).item(0).getChildNodes();
        Node node = (Node) nodes.item(0);
        return node.getNodeValue();

    }

}

1 个答案:

答案 0 :(得分:1)

在方法中创建自己的HashMap obj,您可以从列表中获取所需的记录。例如。 HashMap<int itemId, List<item>> yourOwnItem = new HashMap<>(); 在for循环结束时,将项目传递给yourOwItem,如下所示:
yourOwnItem.put(i , List<item>);