java 如何读取xml文件中的一个节点下的多个相同子节点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 如何读取xml文件中的一个节点下的多个相同子节点相关的知识,希望对你有一定的参考价值。

xml文件中的要读出的部分
<REFNOS>
<REFNO>111111111</REFNO>
<REFNO>222222222</REFNO>
<REFNO>333333333</REFNO>
<REFNO>444444444</REFNO>
</REFNOS>

下面这段代码只有在节点下面有一个的情况下读出来,请高手指教,如果有多个相同节点的话读出来的都是null。

Element records = e.element("REFNOS");
if (records != null)
List elemList = records.elements();
int elength = elemList.size();
for (int i = 0; elemList != null && i < elength; i++)
Element e1 = (Element) elemList.get(i);
nodeRefNo = e1.elementText("REFNO");}
这样的话只能读出节点下有一个元素的。

参考技术A 你的e.element...不就是一个元素吗。

有没有e.elements....
参考技术B 我想,你也许想使用xpath或者xquery来进行操作

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>
参考技术A element.getAttributeValue("id")本回答被提问者采纳

以上是关于java 如何读取xml文件中的一个节点下的多个相同子节点的主要内容,如果未能解决你的问题,请参考以下文章

如何获取xml某个节点的多个值

在c#的winform 下怎么读取 xml文件中的数据?

java中如何读取xml中数据。多节点的。给我一个例子,谢谢。

java如何读取xml节点元素值?

如何让kettle遍历读取某个文件夹下的多个 xml文件

C#如何读取xml文件里面节点里面的属性信息?