簡體   English   中英

解析XML文件(java)

[英]Parsing XML file (java)

我有這個XML文件(Param.xml):

<?xml version="1.0" encoding="UTF-8"?>

<param-config>

    <parameter>
        <tag> BNsprate  </tag>
        <value> 0.8 </value>
    </parameter>

    <parameter>
        <tag> CellId_nbr  </tag>
        <value> 1 </value>
    </parameter>

    <parameter>
        <tag> Calls_nbr  </tag>
        <value> 2 </value>
    </parameter>

    <parameter>
        <tag> Call_time  </tag>
        <value> 00:02:00 </value>
    </parameter>

    <parameter>
        <tag> InCalls_nbr  </tag>
        <value> 0 </value>
    </parameter>

    <parameter>
        <tag> Sms_nbr  </tag>
        <value> 0 </value>
    </parameter>


</param-config>

我編寫了以下Java代碼來打印此文件內容:

  private String paramReader(String tag) {

    String value = "";
    try {

        InputStream is = this.getClass().getClassLoader()
                .getResourceAsStream("Param.xml");

        DocumentBuilderFactory dbFactory = DocumentBuilderFactory
                .newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(is);

        doc.getDocumentElement().normalize();

        NodeList nList = doc.getElementsByTagName("parameter");

        for (int i = 0; i < nList.getLength(); i++) {

            Node nNode = nList.item(i);
            System.out.println(nNode.getNodeValue());

            if (nNode.getNodeType() == Node.ELEMENT_NODE) {
                Element eElement = (Element) nNode;

                if (eElement.getElementsByTagName("tag").item(0)
                        .getTextContent() == tag) {

                    value = eElement.getElementsByTagName("value").item(0)
                            .getTextContent();
                }
            }
        }
        is.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return value;

}

返回值:null null null null null null null請問,為什么它只讀取文件而沒有獲取內容值? 謝謝。

您正在使用等號將String與String進行比較,而此處應使用.equals方法:

if(eElement.getElementsByTagName("tag").item(0).getTextContent()==tag){

相反,它應該像這樣:

if(eElement.getElementsByTagName("tag").item(0).getTextContent().equals(tag)){

==符號檢查引用的相等性,即,如果兩個都引用內存中的同一對象,而您想檢查值的相等性,則返回true,這就是.equals()方法所做的。

為了進行XML解析並再次返回,您必須使用XStream API。 操作非常簡單。請查看此鏈接

http://x-stream.github.io/tutorial.html

修改后的版本如下 這將獲取輸入標簽節點的值節點的文本內容。

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;

/**
 * @author JayaPrasad
 * 
 */
public class ParseXml {

    private String paramReader(String tag) {

        String value = "";
        try {
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory
                    .newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse("parse.xml");

            doc.getDocumentElement().normalize();

            NodeList nList = doc.getElementsByTagName("parameter");

            for (int i = 0; i < nList.getLength(); i++) {

                Node nNode = nList.item(i);
//              NodeList childNodes = nNode.getChildNodes();
//              for (int j = 0, length = childNodes.getLength(); j < length; j++) {
                // System.out.println(childNodes.item(j).getNodeName() + ":"
//                   + childNodes.item(j).getTextContent());
//                  if (childNodes.item(j).getNodeName().equals(tag)) {
//                      value = childNodes.item(j).getTextContent();
//                       System.out.println("Tag Node Value ::: " + value);
//                  }
//              }

                if (nNode.getNodeType() == Node.ELEMENT_NODE) {
                    Element eElement = null;
                    if (nNode instanceof Element) { // Safest way before casting
                        eElement = (Element) nNode;
                    }

                    if (eElement.getElementsByTagName("tag").item(0)
                            .getTextContent().trim().equals(tag)) {

                        value = eElement.getElementsByTagName("value").item(0)
                                .getTextContent();
                        System.out.println("Result value :: " + value);
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return value;

    }

    public static void main(String[] args) {
        ParseXml xmlObj = new ParseXml();
        xmlObj.paramReader("Call_time");
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM