前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >java 获得xml自定义属性

java 获得xml自定义属性

作者头像
DencyCheng
发布于 2019-02-27 09:01:53
发布于 2019-02-27 09:01:53
76900
代码可运行
举报
文章被收录于专栏:SpringBootSpringBoot
运行总次数:0
代码可运行

xmlKit

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import com.jfinal.weixin.sdk.utils.IOUtils;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

import javax.xml.namespace.QName;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.util.HashMap;
import java.util.Map;

public class XMLKit{
    private final XPath path;
    private final Document doc;

    private XMLKit(InputSource inputSource) throws ParserConfigurationException, SAXException, IOException {
        DocumentBuilderFactory dbf = getDocumentBuilderFactory();
        dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
        dbf.setFeature("http://xml.org/sax/features/external-general-entities", false);
        dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
        dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
        dbf.setXIncludeAware(false);
        dbf.setExpandEntityReferences(false);
        DocumentBuilder db = dbf.newDocumentBuilder();
        this.doc = db.parse(inputSource);
        this.path = getXPathFactory().newXPath();
    }

    private static XMLKit create(InputSource inputSource) {
        try {
            return new XMLKit(inputSource);
        } catch (ParserConfigurationException var2) {
            throw new RuntimeException(var2);
        } catch (SAXException var3) {
            throw new RuntimeException(var3);
        } catch (IOException var4) {
            throw new RuntimeException(var4);
        }
    }

    public static XMLKit of(InputStream is) {
        InputSource inputSource = new InputSource(is);
        return create(inputSource);
    }

    public static XMLKit of(String xmlStr) {
        StringReader sr = new StringReader(xmlStr.trim());
        InputSource inputSource = new InputSource(sr);
        XMLKit xmlHelper = create(inputSource);
        IOUtils.closeQuietly(sr);
        return xmlHelper;
    }

    private Object evalXPath(String expression, Object item, QName returnType) {
        item = null == item ? this.doc : item;

        try {
            return this.path.evaluate(expression, item, returnType);
        } catch (XPathExpressionException var5) {
            throw new RuntimeException(var5);
        }
    }

    public String getString(String expression) {
        return (String)this.evalXPath(expression, (Object)null, XPathConstants.STRING);
    }

    public Boolean getBoolean(String expression) {
        return (Boolean)this.evalXPath(expression, (Object)null, XPathConstants.BOOLEAN);
    }

    public Number getNumber(String expression) {
        return (Number)this.evalXPath(expression, (Object)null, XPathConstants.NUMBER);
    }

    public Node getNode(String expression) {
        return (Node)this.evalXPath(expression, (Object)null, XPathConstants.NODE);
    }

    public NodeList getNodeList(String expression) {
        return (NodeList)this.evalXPath(expression, (Object)null, XPathConstants.NODESET);
    }

    public String getString(Object node, String expression) {
        return (String)this.evalXPath(expression, node, XPathConstants.STRING);
    }

    public Boolean getBoolean(Object node, String expression) {
        return (Boolean)this.evalXPath(expression, node, XPathConstants.BOOLEAN);
    }

    public Number getNumber(Object node, String expression) {
        return (Number)this.evalXPath(expression, node, XPathConstants.NUMBER);
    }

    public Node getNode(Object node, String expression) {
        return (Node)this.evalXPath(expression, node, XPathConstants.NODE);
    }

    public NodeList getNodeList(Object node, String expression) {
        return (NodeList)this.evalXPath(expression, node, XPathConstants.NODESET);
    }

    public Map<String, String> toMap() {
        Element root = this.doc.getDocumentElement();
        Map<String, String> params = new HashMap();
        NodeList list = root.getChildNodes();

        for(int i = 0; i < list.getLength(); ++i) {
            Node node = list.item(i);
            if (node instanceof Element) {
                params.put(node.getNodeName(), node.getTextContent());
            }
        }

        return params;
    }

    private static DocumentBuilderFactory getDocumentBuilderFactory() {
        return XMLKit.XMLKitHolder.documentBuilderFactory;
    }

    private static XPathFactory getXPathFactory() {
        return XMLKit.XMLKitHolder.xPathFactory;
    }

    private static class XMLKitHolder {
        private static DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
        private static XPathFactory xPathFactory = XPathFactory.newInstance();

        private XMLKitHolder() {
        }
    }

    /**
     * 获得根节点属性
     * @param attr
     * @return
     */
    public Map getRootTagAttr(String[] attr) {
        Map retrunMap = new HashMap();
        Element root = this.doc.getDocumentElement();
        for (int i = 0; i < attr.length; i++) {
            retrunMap.put(attr[i],root.getAttribute(attr[i]));
        }
        return  retrunMap;
    }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
IOUtils
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import java.io.Closeable;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.nio.charset.Charset;

public abstract class IOUtils {
    private static final int DEFAULT_BUFFER_SIZE = 4096;

    public IOUtils() {
    }

    public static void closeQuietly(Closeable closeable) {
        try {
            if (closeable != null) {
                closeable.close();
            }
        } catch (IOException var2) {
            ;
        }

    }

    public static String toString(InputStream input) throws IOException {
        return toString(input, Charsets.UTF_8);
    }

    public static String toString(InputStream input, Charset charset) throws IOException {
        InputStreamReader in = new InputStreamReader(input, charset);
        StringBuffer out = new StringBuffer();
        char[] c = new char[4096];

        int n;
        while((n = in.read(c)) != -1) {
            out.append(new String(c, 0, n));
        }

        closeQuietly(in);
        closeQuietly(input);
        return out.toString();
    }

    public static void toFile(InputStream input, File file) throws IOException {
        OutputStream os = new FileOutputStream(file);
        int bytesRead = false;
        byte[] buffer = new byte[4096];

        int bytesRead;
        while((bytesRead = input.read(buffer, 0, 4096)) != -1) {
            os.write(buffer, 0, bytesRead);
        }

        closeQuietly(os);
        closeQuietly(input);
    }
}

调用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            XMLKit xmlHelper = XMLKit.of(xml);
            return xmlHelper.getRootTagAttr(tags);
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年01月28日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
JAVA增删改查XML文件
  最近总是需要进行xml的相关操作。   不免的要进行xml的读取修改等,于是上网搜索,加上自己的小改动,整合了下xml的常用操作。   读取XML配置文件   首先我们需要通过DocumentBuilderFactory获取xml文件的工厂实例。 DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance(); dbf.setIgnoringElementContentWhitespace(true);   创建文档对象
用户1154259
2018/01/17
1.5K0
JAVA增删改查XML文件
XXE漏洞:DocumentBuilder使用之殇
xxe这种漏洞无论是在php中还是java中,审计起来应该都是有迹可循的,在php中全局搜索特定函数,在java中需要找解析xml文档的类有没有被使用,所以,我们首先需要知道java有哪些常见的解析xml的类。本文只介绍一个xml解析类——DocumentBuilder,文章很短,可做快餐食用。
tnt阿信
2020/08/05
2.4K0
XXE漏洞:DocumentBuilder使用之殇
解析XML和JSON内容的一点技巧
在没有统一标准的情况下,一个系统对接多个外部系统往往会遇到请求接口响应数据异构的情况,有可能返回的是XML,也有可能返回 JSON。除了返回类型不同,内容结构也不尽相同。以XML类型为例, 接口1返回内容
用户3579639
2018/10/22
1.2K0
Selenium学习笔记之外部化相关测试数据---xml
我们也可以用xml来定义一个信息更为丰富的UIMap.xml文件,比如,额外还添加控件所属的页,控件的类型,然后解析构建一个XMLParser类来读取相应的值。
流柯
2018/08/30
3190
基于DOM的XML文件解析类
最近公司做服务配置检查,特别是zookeeper配置里面关于数据库、redis、域名的配置。刚好还没弄过XML解析,所以顺手封装了一个工具类。
FunTester
2020/10/10
6930
基于DOM的XML文件解析类
Java---XML的解析(1)-DOM解析
本章只讲DOM解析。接下来还会学习Dom4j和StAX 解析技术 DOM解析: DOM解析一次将所有的元素全部加载到内存中:如有以下XML文档:
谙忆
2021/01/21
7030
Java---XML的解析(1)-DOM解析
CodeQL进行JAVA代码审计(1) --- XXE漏洞的挖掘
XXE就是XML外部实体注入。当允许引用外部实体时,通过构造恶意内容,就可能导致任意文件读取、系统命令执行、内网端口探测、攻击内网网站等危害。
半月弧
2020/04/27
3.4K2
CodeQL进行JAVA代码审计(1) --- XXE漏洞的挖掘
Java 根据XPATH批量替换XML节点中的值
根据XPATH批量替换XML节点中的值 by: 授客 测试环境 JDK 1.8.0_25 代码实操 message.xml文件 <Request service="SALE_ORDER_SERVICE" lang="zh-CN"> <Head> <AccessCode>xxxxxxxxxx12Ur8v6qkYAaOf</AccessCode> <Checkword>xxxxxxxxxxkmPif7Z35UEJjrR</Checkword> </Head>
授客
2022/09/28
2.1K0
Stax解析XML示例代码
package org.itat.stax; import java.io.IOException; import java.io.InputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.stream.Event
HUC思梦
2020/09/03
5640
POI生成word文档完整案例及讲解
其实POI的生成Word文档的规则就是先把获取到的数据转成xml格式的数据,然后通过xpath解析表单式的应用取值,判断等等,然后在把取到的值放到word文档中,最后在输出来。
凯哥Java
2019/06/28
11.8K0
POI生成word文档完整案例及讲解
dom读写xml。
文档对象模型写excel东西。 package DomXmlDemo; import org.junit.Test; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; import javax.xml.parsers.DocumentBuilder; import jav
热心的社会主义接班人
2019/05/21
4390
[ java 工具类] xml字符串解析成Map(DOM解析)
package com.tencent.jungle.wechat.util; import com.google.inject.Singleton; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; import javax.xml.parsers.DocumentBuilder; import javax.xml.pars
Tencent JCoder
2018/12/14
3.3K0
Spring周边:XML
DOCTYPE 声明为文档提供一个空间,通过引用外部文件、通过直接声明或通过这两种方式来标识其根元素和文档类型定义 (DTD)。DOCTYPE 声明可以包含下列内容:
WEBJ2EE
2019/10/24
1.8K0
Spring周边:XML
企业微信开启接收消息+验证URL有效性
千寻简笔记已开源,Gitee与GitHub搜索chihiro-notes,包含笔记源文件.md,以及PDF版本方便阅读,且是用了精美主题,阅读体验更佳,如果文章对你有帮助请帮我点一个Star~
千寻简
2023/11/07
2K0
企业微信开启接收消息+验证URL有效性
Java 审计之XXE篇
在以前XXE漏洞了解得并不多,只是有一个初步的认识和靶机里面遇到过。下面来 深入了解一下该漏洞的产生和利用。
全栈程序员站长
2022/07/13
6600
Java开发知识之XML文档使用,解析
XML是一个可扩展的标记语言.(eXTENsible Markup language XML) 很类似于是HTML. HTML是有自己固定的标签,XML是自己定义的.XML主要作用是用来传输数据的, HTML主要用来显示数据的.所以XML不能替代HTML.
IBinary
2019/05/25
1.2K0
JAVA中批量解析并移除XML格式文件指定节点
问题一通过arrayList的交集( .retainAll() )差集( .removeAll() ) 以及并集( .removeAll() + .addAll() )方法,来将需要移除或者保留的接口进行筛选出来。再交付给第二步进行操作。
Diuut
2022/11/22
1.1K0
从JDK源码来看XXE的触发原理和对应的防御手段
这个JDK中内置的类是一种的DOM型的解释器,该种Parser的特点是将完整的xml文档内容加载到树结构中去,然后我们通过遍历结点来获取我们需要的内容。
FB客服
2023/02/10
4820
从JDK源码来看XXE的触发原理和对应的防御手段
XML格式化工具类(java)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/160163.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/13
1.7K0
【Java】已解决:javax.xml.xpath.XPathExpressionException
在Java开发中,javax.xml.xpath.XPathExpressionException是一种常见的异常,尤其是在处理XML文档时。该异常通常与XPath表达式相关,表示在解析或执行XPath表达式时出现错误。本文将深入探讨这一异常的背景、可能的原因,并提供错误和正确的代码示例,帮助您有效地解决这一问题。
屿小夏
2024/09/11
1880
相关推荐
JAVA增删改查XML文件
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验