读取特定节点的XML

时间:2014-07-01 14:23:29

标签: java xml dom

假设我有一个类似下面的XML

<?xml version="1.0" encoding="UTF-8"?>
<Data>
    <CreditCards>
        <Visa>
            <Name>visaname</Name>
            <Number>4265787654344445</Number>
            <ExpMonth>05</ExpMonth>
            <ExpYear>2017</ExpYear>
            <CVV>123</CVV>
        </Visa>
        <Master>
            <Name>mastername</Name>
            <Number>5678787654344445</Number>
            <ExpMonth>05</ExpMonth>
            <ExpYear>2015</ExpYear>
            <CVV>123</CVV>
        </Master>
    </CreditCards>
</Data>

假设我有一个类似下面的方法

public void readData(String nodeName) {

//Code here

}

所以当我使用像

这样的方法时
readData("Visa"); 

我应该打印所有子节点和相应的值。输出应该如下所示

Name = visaname
Number = 4265787654344445
ExpMonth = 05
ExpYear = 2017
CVV = 123

如果我有一个像下面这样的xml

<Data>
    <employee>
        <firstname>test1</firstname>
        <lastname>lasttest</lastname>
    </employee>
</data>

如果我的方法如下所示

public void readData2(String nodeName) {

//Code here

}

当我使用方法时

readData2("firstname");

应打印以下内容

test1

真的有可能吗?我尝试使用JDOM2 API,但无法使其正常工作。实现这两个结果的理想方法是什么?谢谢!

我正在尝试的代码

public void readXMLData(String filePath) {

    File xmlFile = new File(filePath);
    Map<String,String> parametersMap = new HashMap<String,String>();
    try {
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(xmlFile);
        doc.getDocumentElement().normalize();

        //Root Element
        System.out.println("Root element : " + doc.getDocumentElement().getNodeName());

        NodeList nodeLst = doc.getElementsByTagName("Visa");
        System.out.println("----------Information of Visa Card----------");

        Node node = nodeLst.item(0);

        if (node.getNodeType() == Node.ELEMENT_NODE) {
            Element element = (Element) node;
            System.out.println("Child nodes : "+element.getChildNodes());

        }

    }
    catch(Exception e) {
        e.printStackTrace();
    }
}

0 个答案:

没有答案