java工具--XmlParse

XmlParse是一个Java实现的XML文件解析工具,它使用DOM解析器读取XML字符串并将其转换为DOM文档。提供了将DOM文档转换为字符串的方法,以及解析XML中特定元素的方法,如parseMeth(),用于获取表格数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

xml文件解析工具

public class XmlParse
{
    DocumentBuilderFactory dbf;
    DocumentBuilder db;
    Document doc;

    public Document getDocument() {
        return doc;
    }

    public String doc2String() {
        return doc2String(doc);
    }

    //
    public static String doc2String(Document doc) {
        String str = null;
        try
        {
            DOMSource source = new DOMSource(doc);
            StringWriter writer = new StringWriter();
            Transformer transformer = TransformerFactory.newInstance().newTransformer();
            transformer.setOutputProperty("encoding", "UTF-8");
            transformer.setOutputProperty("indent", "no");
            transformer.transform(source, new StreamResult(writer));
            
            str = writer.getBuffer().toString();
            str = ExpressionDeal.replace(str, "\r", "");
            str = ExpressionDeal.replace(str, "\n", "");
            
            return str;
        } catch (Exception e) {
            PosLog.getLog("XmlParse").error(e);
            e.printStackTrace();
            return null;
        }
    
    }

    //
    public XmlParse(String arg)
    {
        dbf = null;
        db = null;
        doc = null;
        try
        {
            //DOM解析器工厂实例
            dbf = DocumentBuilderFactory.newInstance();
            //从DOM解析器工厂实例取得DOM 解析器
            db = dbf.newDocumentBuilder();
            //读取指定路径的XML文件,通过DocumentBuilder类进行DOM树的转换操作
            doc = db.parse(new InputSource(new StringReader(arg)));
        } catch (ParserConfigurationException e) {
            PosLog.getLog(getClass()).error(e);
            e.printStackTrace();
        } catch (SAXException e) {
            PosLog.getLog(getClass()).error(e);
            e.printStackTrace();
        } catch (IOException e) {
            PosLog.getLog(getClass()).error(e);
            e.printStackTrace();
        }
    }

    public static void main(String[] args)
    {
        String line = "<root><table><row><code>1</code><name>早班</name><btime>08:00</btime><etime>12:30</etime></row><row><code>2</code><name>晚班</name><btime>18:00</btime><etime>22:00</etime></row><row><code>5</code><name>全班</name><btime>08:00</btime><etime>20:00</etime></row><row><code>3</code><name>中班</name><btime>12:00</btime><etime>18:30</etime></row></table></root>";
        XmlParse xml = new XmlParse(line);
        Vector v = xml.parseMeth(0, new String[] { "code", "name", "btime1" });
        for (int i = 0; i < v.size(); i++)
        {
            String[] row = (String[]) v.elementAt(i);
            for (int j = 0; j < row.length; j++)
            {
                if (row[j].length() > 0)
                    System.out.print(row[j] + "      ");
                else
                    System.out.print("null         ");
                
            }
            System.out.println("");
        }
    }

    //
    public Vector parseMeth(int index, String[] arg)
    {
        Vector v = new Vector();
        NodeList nList = doc.getElementsByTagName("table");
        String[] row = null;
        NodeList nll = ((Element) nList.item(index < 0 ? nList.getLength() - 1 : index)).getElementsByTagName("row");

        for (int j = 0; j < nll.getLength(); j++) {
            row = new String[arg.length];
            for (int i = 0; i < arg.length; i++) {
                NodeList t = ((Element) nll.item(j)).getElementsByTagName(arg[i]);
                if ((t == null) || (t.item(0) == null)) {
                    row[i] = "";
                } else {
                    Text t1 = (Text) t.item(0).getFirstChild();
                    if (t1 != null)
                        row[i] = t1.getNodeValue();
                    else
                        row[i] = "";
                }
            }

            v.add(row);
        }

        return v;
    }

    //
    public Vector parseMeth(int index)
    {
        Vector v = new Vector();
        NodeList nList = doc.getElementsByTagName("table");
        NodeList nll = ((Element) nList.item(index < 0 ? nList.getLength() - 1 : index)).getElementsByTagName("row");
                
        for (int j = 0; j < nll.getLength(); j++) {
            NodeList t = ((Element) nll.item(j)).getElementsByTagName("*");
            String[] row = new String[t.getLength()];
            for (int k = 0; k < t.getLength(); k++) {
                Text t1 = (Text) t.item(k).getFirstChild();
                row[k] = t1.getNodeValue();
            }

            v.add(row);
        }

        return v;
    }

    //
    public static void setElementValue(Element element, String val)
    {
        Node node = element.getOwnerDocument().createTextNode(val);
        NodeList nl = element.getChildNodes();
        for (int i = 0; i < nl.getLength(); i++) {
            Node nd = nl.item(i);
            if (nd.getNodeType() == 3) {
                nd.setNodeValue(val);
                return;
            }
        }

        element.appendChild(node);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值