繁体   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