java之读取xml字符串(java如何解析xml字符串)

发布时间:2022-11-15

本文目录一览:

  1. java中如何读入XML格式的string或硬盘文件?还有怎么判定一个string的内容为XML格式的?
  2. java读取xml文件内容
  3. 在Java中如何读取XML字符串的元素值

java中如何读入XML格式的string或硬盘文件?还有怎么判定一个string的内容为XML格式的?

public class Test {
    public static void main(String args[]){
        boolean b = false;
        try {
            FileReader read = new FileReader("D:/struts.xml");
            BufferedReader br = new BufferedReader(read);
            String row;
            int i=0;
            while((row = br.readLine())!=null){
                System.out.println(row);
                if(row.substring(0, 5).equals("?xml") || row.substring(row.length()-2, row.length()).equals("?")){
                    b=true;
                }
                i++;
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e){
            e.printStackTrace();
        }
        if(b){
            System.out.println("这是一个xml文件");
        }else
            System.out.println("这不是一个xml文件");
    }
}

运行结果:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
""
<struts>
<include file="struts-login.xml" />
<include file="struts-okd.xml" />
<include file="struts-smt.xml" />
</struts>

这是一个xml文件

当我把文件换为test.xml时,运行结果:

01211132abcd

这不是一个xml文件

java读取xml文件内容

java中不是有个读取xml文件的类吗?之间调用那类读取出来,然后用取节点的方法去取对应节点的里的值。等下给你代码。

public class ReaderXml {
    private static String filename = "E:\\workplace\\readerxml\\bin\\reader\\xml\\reader.xml";
    // private static Config config;
    public static void main(String []args) throws Exception{
        //这里用反射机制
        DocumentBuilderFactory domfac=DocumentBuilderFactory.newInstance();
        DocumentBuilder dombuilder=domfac.newDocumentBuilder();
        //读取文件流
        InputStream is=new FileInputStream(filename);
        Document doc=dombuilder.parse(is);
        Element root=doc.getDocumentElement();
        //获取所有xml节点
        NodeList dbinfo=root.getChildNodes();
        if(dbinfo!=null){
            for(int i=0;i<dbinfo.getLength();i++){
                //获取节点判断
                Node db=dbinfo.item(i);
                //如果是Hardwares节点,也就是你xml文件的最顶处的节点
                if(db.getNodeName().equals("Hardwares")){
                    //获取第二个节点包含的所有节点
                    NodeList list=db.getChildNodes();
                    for(int y=0;y<list.getLength();y++){
                        Node n=list.item(y);
                        //如果节点等于Hardware
                        if(n.getNodeName().equals("Hardware")){
                            //获取Hardware节点中的所有节点
                            NodeList CnodeList=n.getChildNodes();
                            //取出Hardware里面的所有节点
                            for(int k=0;k<CnodeList.getLength();k++){
                                //取出节点
                                Node cn=CnodeList.item(k);
                                //去掉里面的#text文件节点。没用,这个不是你配置的节点,应该是xml文件隐藏的
                                if(!cn.getNodeName().equals("#text")){
                                    //打印你所配置的所有节点 
                                    System.out.println("node["+k+"]="+cn.getNodeName()+" nodeValue["+k+"]="+cn.getTextContent());
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

//具体你要干嘛自己弄了!

在Java中如何读取XML字符串的元素值

java读取xml节点元素,主要使用java提供的解析xml的工具类SAXParserFactory,如下代码:

package xml.xmlreader;
import java.io.File;
import java.net.URL;
import java.util.Properties;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
public class CFGParser {
    //解析xml文件的工具类 
    private Properties props; 
    public Properties getProps() { 
        return props; 
    } 
    public void setProps(Properties props) { 
        this.props = props; 
    } 
    public void parse(String filename) throws Exception { 
        CFGHandler handler = new CFGHandler(); 
        SAXParserFactory factory = SAXParserFactory.newInstance(); 
        factory.setNamespaceAware(false); 
        factory.setValidating(false); 
        SAXParser parser = factory.newSAXParser(); 
        URL confURL = super.getClass().getClassLoader().getResource(filename); 
        if (confURL == null) { 
            System.out.println("Can't find configration file."); 
            return; 
        } 
        try { 
            parser.parse(confURL.toString(), handler); 
            this.props = handler.getProps(); 
        } finally { 
            factory = null; 
            parser = null; 
            handler = null; 
        } 
    } 
    public void parseFile(String filename) throws Exception { 
        CFGHandler handler = new CFGHandler(); 
        SAXParserFactory factory = SAXParserFactory.newInstance(); 
        factory.setNamespaceAware(false); 
        factory.setValidating(false); 
        SAXParser parser = factory.newSAXParser(); 
        File f = new File(filename); 
        if ((f == null) || (!f.exists())) return; 
        try { 
            parser.parse(f, handler); 
            this.props = handler.getProps(); 
        } finally { 
            factory = null; 
            parser = null; 
            handler = null; 
        } 
    }
}
package xml.xmlreader;
import java.util.Properties;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler; 
public class CFGHandler extends DefaultHandler{
    private Properties props; 
    private String currentSet; 
    private String currentName; 
    private StringBuffer currentValue = new StringBuffer(); 
    public CFGHandler() { 
        this.props = new Properties(); 
    } 
    public Properties getProps() { 
        return this.props; 
    } 
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { 
        this.currentValue.delete(0, this.currentValue.length()); 
        this.currentName = qName; 
    } 
    public void characters(char[] ch, int start, int length) throws SAXException { 
        this.currentValue.append(ch, start, length); 
    } 
    public void endElement(String uri, String localName, String qName) throws SAXException { 
        this.props.put(qName.toLowerCase(), this.currentValue.toString().trim()); 
    }
}

xml文件

<?xml version="1.0" encoding="UTF-8"?>
<xml-body>
    <refresh_userlist desc="用户列表刷新间隔时间(秒)">6</refresh_userlist>
    <refresh_message desc="短消息刷新间隔时间(秒)">10</refresh_message>
    <morningbegin desc="上午上班时间">23:00</morningbegin>
    <morningend desc="上午下班时间">12:00</morningend>
    <afternoonbegin desc="下午上班时间">18:00</afternoonbegin>
</xml-body>

jsp获取各个节点的值:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<jsp:useBean id="cfgp" scope="page" class="xml.xmlreader.CFGParser"/>
<jsp:useBean>
<body>
<%
    cfgp.parse("kaoqin.xml"); 
    Properties pro = cfgp.getProps(); 
    String stTime = pro.getProperty("morningbegin"); 
    String edTime = pro.getProperty("morningend"); 
    String afternoonbegin = pro.getProperty("afternoonbegin"); 
    out.println(stTime+"\n"+edTime+"\n"+afternoonbegin); 
    System.out.println(stTime+"\n"+edTime+"\n"+afternoonbegin); 
%>
</body>
</html>