【196】JAVA8 用 DOM 方式的 API 解析XML文件,无需引入第三方依赖。

这篇具有很好参考价值的文章主要介绍了【196】JAVA8 用 DOM 方式的 API 解析XML文件,无需引入第三方依赖。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

JAVA8 可以使用标准的 DOM 方式的 API 来编写代码解析 XML 文件,无需引入第三方依赖。下面是两个测试用的 XML 文件:

test.xml

<allData>
    <pan attr1="a" attr2="b">
        1
    </pan>
    <tilt>
        2
    </tilt>
    <zoom>
        3
    </zoom>
    <list>
        <item>
            item0
        </item>
        <item>item1</item>
        <item>item2</item>
    </list>

    <user-list>
        <user>
            <name>
                张三
            </name>
            <gender></gender>
        </user>
        <user>
            <name>
                高启兰
            </name>
            <gender></gender>
        </user>
    </user-list>
</allData>

test2.xml

<allData>
    <pan attr1="a" >
        1
    </pan>
    <zoom>
        3
    </zoom>
    <list>
        <item>
            item0
        </item>
        <item>item1</item>
        <item>item2</item>
    </list>
</allData>

负责接收所有信息的 AllDataDTO.java

package zhangchao;
import java.util.ArrayList;
import java.util.List;

public class AllDataDTO {
    private Integer pan;
    private Integer tilt;
    private Integer zoom;
    private List<String> list = new ArrayList<>();
    private String panAttr1;
    private String panAttr2;
    private List<AllDataUserDTO> userList = new ArrayList<>();
    ///
    //  setters/getters
    ///
    @Override
    public String toString() {
        final StringBuffer sb = new StringBuffer("AllDataDTO{");
        sb.append("pan=").append(pan);
        sb.append(", tilt=").append(tilt);
        sb.append(", zoom=").append(zoom);
        sb.append(", list=").append(list);
        sb.append(", panAttr1='").append(panAttr1).append('\'');
        sb.append(", panAttr2='").append(panAttr2).append('\'');
        sb.append(", userList=").append(userList);
        sb.append('}');
        return sb.toString();
    }
    public List<AllDataUserDTO> getUserList() {
        return userList;
    }
    public void setUserList(List<AllDataUserDTO> userList) {
        this.userList = userList;
    }
    public List<String> getList() {
        return list;
    }
    public void setList(List<String> list) {
        this.list = list;
    }
    public String getPanAttr1() {
        return panAttr1;
    }
    public void setPanAttr1(String panAttr1) {
        this.panAttr1 = panAttr1;
    }

    public String getPanAttr2() {
        return panAttr2;
    }
    public void setPanAttr2(String panAttr2) {
        this.panAttr2 = panAttr2;
    }
    public Integer getPan() {
        return pan;
    }
    public void setPan(Integer pan) {
        this.pan = pan;
    }
    public Integer getTilt() {
        return tilt;
    }
    public void setTilt(Integer tilt) {
        this.tilt = tilt;
    }
    public Integer getZoom() {
        return zoom;
    }
    public void setZoom(Integer zoom) {
        this.zoom = zoom;
    }
}

负责接收用户信息的 AllDataUserDTO.java

package zhangchao;

public class AllDataUserDTO {
    private String name;
    private String gender;
    @Override
    public String toString() {
        final StringBuffer sb = new StringBuffer("AllDataUserDTO{");
        sb.append("name='").append(name).append('\'');
        sb.append(", gender='").append(gender).append('\'');
        sb.append('}');
        return sb.toString();
    }
    ///
    //  setters/getters
    ///
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
}

处理 XML 文件的工具类,XmlUtils.java

package zhangchao;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.File;
import java.io.IOException;

public class XmlUtils {
    public static AllDataDTO parseXml(String xmlFilePath) {
        File file = new File(xmlFilePath);
        if (!file.exists()) {
            return null;
        }
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//创建一个DocumentBuilderFactory的对象
        DocumentBuilder builder;
        AllDataDTO allDataDTO = null;
        try {
            builder = factory.newDocumentBuilder();//创建一个DocumentBuilder对象
            Document doc = builder.parse("file:///" + xmlFilePath);
            Element root = doc.getDocumentElement();//获取根节点
            allDataDTO = new AllDataDTO();
            NodeList childNodes = root.getChildNodes();
            int length = childNodes.getLength();
            for (int i = 0; i < length; i++) {
                Node node = childNodes.item(i);
                String nodeName = node.getNodeName();
                if ("pan".equals(nodeName)) {
                    String content = node.getTextContent();
                    content = (content == null ? null : content.trim());
                    Integer tmp = null;
                    try {
                        tmp = Integer.parseInt(content);
                    } catch (NumberFormatException e) {}
                    allDataDTO.setPan(tmp);
                    NamedNodeMap namedNodeMap = node.getAttributes();
                    Node attr1 = namedNodeMap.getNamedItem("attr1");
                    if (attr1 != null) {
                        String attr1Cont = attr1.getTextContent();
                        attr1Cont = (attr1Cont == null ? null : attr1Cont.trim());
                        allDataDTO.setPanAttr1(attr1Cont);
                    }

                    Node attr2 = namedNodeMap.getNamedItem("attr2");
                    if (attr2 != null) {
                        String attr2Cont = attr2.getTextContent();
                        attr2Cont = (attr2Cont == null ? null : attr2Cont.trim());
                        allDataDTO.setPanAttr2(attr2Cont);
                    }

                } else if ("tilt".equals(nodeName)) {
                    String content = node.getTextContent();
                    content = (content == null ? null : content.trim());
                    Integer tmp = null;
                    try {
                        tmp = Integer.parseInt(content);
                    } catch (NumberFormatException e) {}
                    allDataDTO.setTilt(tmp);
                } else if ("zoom".equals(nodeName)) {
                    String content = node.getTextContent();
                    content = (content == null ? null : content.trim());
                    Integer tmp = null;
                    try {
                        tmp = Integer.parseInt(content);
                    } catch (NumberFormatException e) {}
                    allDataDTO.setZoom(tmp);
                } else if ("list".equals(nodeName)) {
                    NodeList itemList = node.getChildNodes();
                    int itemLength = itemList.getLength();
                    for (int j = 0; j < itemLength; j++) {
                        Node item = itemList.item(j);
                        if ("item".equals(item.getNodeName())) {
                            String content = item.getTextContent();
                            content = (content == null ? "" : content.trim());
                            allDataDTO.getList().add(content);
                        }
                    }
                } else if ("user-list".equals(nodeName)) {
                    NodeList userList = node.getChildNodes();
                    int userListLength = userList.getLength();
                    for (int j = 0; j < userListLength; j++) {
                        Node user = userList.item(j);
                        // 读取用户的属性
                        if ("user".equals(user.getNodeName())) {
                            AllDataUserDTO userDTO = new AllDataUserDTO();
                            NodeList params = user.getChildNodes();
                            int paramsLength = params.getLength();
                            for (int k = 0; k < paramsLength; k++) {
                                Node param = params.item(k);
                                String content = param.getTextContent();
                                if (content != null) {
                                    content = content.trim();
                                }
                                String paramName = param.getNodeName();
                                if ("name".equals(paramName)) {
                                    userDTO.setName(content);
                                } else if ("gender".equals(paramName)) {
                                    userDTO.setGender(content);
                                }
                            }
                            allDataDTO.getUserList().add(userDTO);
                        }
                    }
                }
            }
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        }
        return allDataDTO;
    }
}

用于测试效果的类 Main.java

package zhangchao;

public class Main {
    public static void main(String[] args) {
        AllDataDTO allDataDTO = XmlUtils
                .parseXml("E:\\ws\\zc\\Java8Xml\\src\\main\\resources\\TestFile\\" +
                        "test.xml");
        AllDataDTO allDataDTO2 = XmlUtils
                .parseXml("E:\\ws\\zc\\Java8Xml\\src\\main\\resources\\TestFile\\" +
                        "test2.xml");
        System.out.println(allDataDTO);
        System.out.println(allDataDTO2);
    }
}

输出结果:文章来源地址https://www.toymoban.com/news/detail-815770.html

AllDataDTO{pan=1, tilt=2, zoom=3, list=[item0, item1, item2], panAttr1='a', panAttr2='b', userList=[AllDataUserDTO{name='张三', gender='男'}, AllDataUserDTO{name='高启兰', gender='女'}]}
AllDataDTO{pan=1, tilt=null, zoom=3, list=[item0, item1, item2], panAttr1='a', panAttr2='null', userList=[]}

到了这里,关于【196】JAVA8 用 DOM 方式的 API 解析XML文件,无需引入第三方依赖。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java中解析XML文件

            XML(EXtensible Markup Language),可扩展标记语言,相比于HTML可以自定义标签,不遵循W3C标准         XML特点:跨平台、跨语言、跨系统。XML与操作系统、编程语言的开发平台无关。         XML作用:①数据交互②使用XML文件配置应用程序和网站 1.文档声明 包括文档

    2024年02月09日
    浏览(27)
  • [Java]_[初级]_[使用SAX流的方式写入XML文件]

    文件的写入目前没有发现可以增量写入的,只能是完全重新写入。对于大量数据需要写入 XML 文件,还是和读 XML 文件一样,不需要生成 DOM 模型能节省不少的内存和指令。 在 java 标准库里,也是有相关的SAX类来写入数据流, StreamResult(OutputStream) 负责把数据写入输出流。 之后

    2024年02月10日
    浏览(39)
  • javaee dom4j读取xml文件

    dom4j-1.6.1.jar 运行

    2024年02月13日
    浏览(74)
  • java 使用documents4j将XML转为pdf文件的方式

    通过spire.doc.free将word转换成PDF时存在缺陷:只能获取前3页。获取全文另外需支付费用。 使用documents4j,documents4j会保留原word文件中更多的样式,如修订模式下的差异化字体颜色、文档右侧修订记录等。 1.引入Pom 2.  xml2pdf方法如下,xmlpath是xml文件地址,pdfPath是生成的pdf地址

    2024年02月21日
    浏览(35)
  • Java8 时间处理API(Date Time API)详解

    在Java8之前,我们通常使用 java.util.Date 和 java.util.Calendar 类来处理日期和时间相关的操作,例如: 这种方式虽然可以实现功能,但是有一些缺点: 可变性: Date 和 Calendar 类都是可变的,这意味着它们的值可以被修改,这可能会导致一些线程安全和逻辑错误的问题。 可读性差

    2024年02月11日
    浏览(37)
  • JAVA8新特性(Stream API,LocalDate,LocalDateTime)

    一. Stream API 1.1 基础 代码参数准备: 场景一:知道一个ListUser对象,如何获取ListUser的所有用户id? 场景二:知道一个ListUser对象,如何获取ListUser中年龄大于50的用户? 场景三:知道一个ListUser对象,如何按照年龄从小到小排序,从大到小排序? 场景四:知道一个ListUser对象

    2024年02月16日
    浏览(36)
  • 《Java8实战》第8章 Collection API 的增强功能

    8.1 集合工厂 如果我想创建一个集合,之前的做法是先new一个list,然后再一个个的add,这样子有点繁琐。 现在的方法可以这样,是使用 Arrays.asList()工厂方法: ListString friends = Arrays.asList(\\\"Raphael\\\", \\\"Olivia\\\", \\\"Thibaut\\\"); 但是这样子创建只能更新,不可以增加、删除。 8.1.1 List 工厂 工

    2023年04月24日
    浏览(22)
  • 无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]

    这是我在学习 JSTL 时产生的错误。 没有使用 Maven 。 是手动引入 JSTL 包(jstl.jar 和 standard.jar)。在请求转发到 .jsp 界面,再没有使用 JSTL 语句前是通的,使用 JSTL 后就会报错。 org.apache.jasper.JasperException: 无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.

    2023年04月08日
    浏览(32)
  • 【已解决】无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]

    解决时间:2023/3/31,我使用的tomcat是8.5版本的,在整合SSM项目时在jsp中使用JSTL的核心标签库 - core,也就是使用 c:forEach 标签遍历出现了这个问题: 无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri 不知道该怎么说明这个bug,因为我已经在网上试过很多方法了。 比如

    2024年02月07日
    浏览(55)
  • Java8 Stream分组groupBy后,取单一字段值、取列表第一个值方式

    java8 Stream中groupBy的拓展用法。 取单一字段值、取列表第一个值方式

    2024年02月14日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包