Class XmlUtil

java.lang.Object
com.luna.common.xml.XmlUtil

public class XmlUtil extends Object
XML工具类
此工具使用w3c dom工具,不需要依赖第三方包。
工具类封装了XML文档的创建、读取、写出和部分XML操作
Author:
xiaoleilu
See Also:
  • Field Details

  • Constructor Details

    • XmlUtil

      public XmlUtil()
  • Method Details

    • disableDefaultDocumentBuilderFactory

      public static void disableDefaultDocumentBuilderFactory()
      禁用默认的DocumentBuilderFactory,禁用后如果有第三方的实现(如oracle的xdb包中的xmlparse),将会自动加载实现。
    • setNamespaceAware

      public static void setNamespaceAware(boolean isNamespaceAware)
      设置是否打开命名空间支持,默认打开
      Parameters:
      isNamespaceAware - 是否命名空间支持
      Since:
      5.3.1
    • readXML

      public static Document readXML(File file)
      读取解析XML文件
      Parameters:
      file - XML文件
      Returns:
      XML文档对象
    • readXML

      public static Document readXML(String pathOrContent)
      读取解析XML文件
      如果给定内容以“<”开头,表示这是一个XML内容,直接读取,否则按照路径处理
      路径可以为相对路径,也可以是绝对路径,相对路径相对于ClassPath
      Parameters:
      pathOrContent - 内容或路径
      Returns:
      XML文档对象
      Since:
      3.0.9
    • readXML

      public static Document readXML(InputStream inputStream) throws UtilException
      读取解析XML文件
      编码在XML中定义
      Parameters:
      inputStream - XML流
      Returns:
      XML文档对象
      Throws:
      UtilException - IO异常或转换异常
      Since:
      3.0.9
    • readXML

      public static Document readXML(Reader reader) throws UtilException
      读取解析XML文件
      Parameters:
      reader - XML流
      Returns:
      XML文档对象
      Throws:
      UtilException - IO异常或转换异常
      Since:
      3.0.9
    • readXML

      public static Document readXML(InputSource source)
      读取解析XML文件
      编码在XML中定义
      Parameters:
      source - InputSource
      Returns:
      XML文档对象
      Since:
      3.0.9
    • readBySax

      public static void readBySax(File file, ContentHandler contentHandler)
      使用Sax方式读取指定的XML
      如果用户传入的contentHandler为DefaultHandler,则其接口都会被处理
      Parameters:
      file - XML源文件,使用后自动关闭
      contentHandler - XML流处理器,用于按照Element处理xml
      Since:
      5.4.4
    • readBySax

      public static void readBySax(Reader reader, ContentHandler contentHandler)
      使用Sax方式读取指定的XML
      如果用户传入的contentHandler为DefaultHandler,则其接口都会被处理
      Parameters:
      reader - XML源Reader,使用后自动关闭
      contentHandler - XML流处理器,用于按照Element处理xml
      Since:
      5.4.4
    • readBySax

      public static void readBySax(InputStream source, ContentHandler contentHandler)
      使用Sax方式读取指定的XML
      如果用户传入的contentHandler为DefaultHandler,则其接口都会被处理
      Parameters:
      source - XML源流,使用后自动关闭
      contentHandler - XML流处理器,用于按照Element处理xml
      Since:
      5.4.4
    • readBySax

      public static void readBySax(InputSource source, ContentHandler contentHandler)
      使用Sax方式读取指定的XML
      如果用户传入的contentHandler为DefaultHandler,则其接口都会被处理
      Parameters:
      source - XML源,可以是文件、流、路径等
      contentHandler - XML流处理器,用于按照Element处理xml
      Since:
      5.4.4
    • parseXml

      public static Document parseXml(String xmlStr)
      将String类型的XML转换为XML文档
      Parameters:
      xmlStr - XML字符串
      Returns:
      XML文档
    • toStr

      public static String toStr(Node doc)
      将XML文档转换为String
      字符编码使用XML文档中的编码,获取不到则使用UTF-8
      默认非格式化输出,若想格式化请使用format(Document)
      Parameters:
      doc - XML文档
      Returns:
      XML字符串
      Since:
      5.4.5
    • toStr

      public static String toStr(Document doc)
      将XML文档转换为String
      字符编码使用XML文档中的编码,获取不到则使用UTF-8
      默认非格式化输出,若想格式化请使用format(Document)
      Parameters:
      doc - XML文档
      Returns:
      XML字符串
    • toStr

      public static String toStr(Node doc, boolean isPretty)
      将XML文档转换为String
      字符编码使用XML文档中的编码,获取不到则使用UTF-8
      Parameters:
      doc - XML文档
      isPretty - 是否格式化输出
      Returns:
      XML字符串
      Since:
      5.4.5
    • toStr

      public static String toStr(Document doc, boolean isPretty)
      将XML文档转换为String
      字符编码使用XML文档中的编码,获取不到则使用UTF-8
      Parameters:
      doc - XML文档
      isPretty - 是否格式化输出
      Returns:
      XML字符串
      Since:
      3.0.9
    • toStr

      public static String toStr(Node doc, String charset, boolean isPretty)
      将XML文档转换为String
      字符编码使用XML文档中的编码,获取不到则使用UTF-8
      Parameters:
      doc - XML文档
      charset - 编码
      isPretty - 是否格式化输出
      Returns:
      XML字符串
      Since:
      5.4.5
    • toStr

      public static String toStr(Document doc, String charset, boolean isPretty)
      将XML文档转换为String
      字符编码使用XML文档中的编码,获取不到则使用UTF-8
      Parameters:
      doc - XML文档
      charset - 编码
      isPretty - 是否格式化输出
      Returns:
      XML字符串
      Since:
      3.0.9
    • toStr

      public static String toStr(Node doc, String charset, boolean isPretty, boolean omitXmlDeclaration)
      将XML文档转换为String
      字符编码使用XML文档中的编码,获取不到则使用UTF-8
      Parameters:
      doc - XML文档
      charset - 编码
      isPretty - 是否格式化输出
      omitXmlDeclaration - 是否忽略 xml Declaration
      Returns:
      XML字符串
      Since:
      5.1.2
    • format

      public static String format(Document doc)
      格式化XML输出
      Parameters:
      doc - Document XML文档
      Returns:
      格式化后的XML字符串
      Since:
      4.4.5
    • format

      public static String format(String xmlStr)
      格式化XML输出
      Parameters:
      xmlStr - XML字符串
      Returns:
      格式化后的XML字符串
      Since:
      4.4.5
    • toFile

      public static void toFile(Document doc, String absolutePath)
      将XML文档写入到文件
      使用Document中的编码
      Parameters:
      doc - XML文档
      absolutePath - 文件绝对路径,不存在会自动创建
    • toFile

      public static void toFile(Document doc, String path, String charsetName)
      将XML文档写入到文件
      Parameters:
      doc - XML文档
      path - 文件路径绝对路径或相对ClassPath路径,不存在会自动创建
      charsetName - 自定义XML文件的编码,如果为null 读取XML文档中的编码,否则默认UTF-8
    • write

      public static void write(Node node, Writer writer, String charset, int indent)
      将XML文档写出
      Parameters:
      node - Node XML文档节点或文档本身
      writer - 写出的Writer,Writer决定了输出XML的编码
      charset - 编码
      indent - 格式化输出中缩进量,小于1表示不格式化输出
      Since:
      3.0.9
    • write

      public static void write(Node node, Writer writer, String charset, int indent, boolean omitXmlDeclaration)
      将XML文档写出
      Parameters:
      node - Node XML文档节点或文档本身
      writer - 写出的Writer,Writer决定了输出XML的编码
      charset - 编码
      indent - 格式化输出中缩进量,小于1表示不格式化输出
      omitXmlDeclaration - 是否输出 xml Declaration
      Since:
      5.1.2
    • write

      public static void write(Node node, OutputStream out, String charset, int indent)
      将XML文档写出
      Parameters:
      node - Node XML文档节点或文档本身
      out - 写出的Writer,Writer决定了输出XML的编码
      charset - 编码
      indent - 格式化输出中缩进量,小于1表示不格式化输出
      Since:
      4.0.8
    • write

      public static void write(Node node, OutputStream out, String charset, int indent, boolean omitXmlDeclaration)
      将XML文档写出
      Parameters:
      node - Node XML文档节点或文档本身
      out - 写出的Writer,Writer决定了输出XML的编码
      charset - 编码
      indent - 格式化输出中缩进量,小于1表示不格式化输出
      omitXmlDeclaration - 是否输出 xml Declaration
      Since:
      5.1.2
    • transform

      public static void transform(Source source, Result result, String charset, int indent)
      将XML文档写出
      格式化输出逻辑参考:https://stackoverflow.com/questions/139076/how-to-pretty-print-xml-from-java
      Parameters:
      source - 源
      result - 目标
      charset - 编码
      indent - 格式化输出中缩进量,小于1表示不格式化输出
      Since:
      4.0.9
    • transform

      public static void transform(Source source, Result result, String charset, int indent, boolean omitXmlDeclaration)
      将XML文档写出
      格式化输出逻辑参考:https://stackoverflow.com/questions/139076/how-to-pretty-print-xml-from-java
      Parameters:
      source - 源
      result - 目标
      charset - 编码
      indent - 格式化输出中缩进量,小于1表示不格式化输出
      omitXmlDeclaration - 是否输出 xml Declaration
      Since:
      5.1.2
    • createXml

      public static Document createXml()
      创建XML文档
      创建的XML默认是utf8编码,修改编码的过程是在toStr和toFile方法里,即XML在转为文本的时候才定义编码
      Returns:
      XML文档
      Since:
      4.0.8
    • createDocumentBuilder

      public static DocumentBuilder createDocumentBuilder()
      创建 DocumentBuilder
      Returns:
      DocumentBuilder
      Since:
      4.1.2
    • createDocumentBuilderFactory

      public static DocumentBuilderFactory createDocumentBuilderFactory()
      创建DocumentBuilderFactory

      默认使用"com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl"
      如果使用第三方实现,请调用disableDefaultDocumentBuilderFactory()

      Returns:
      DocumentBuilderFactory
    • createXml

      public static Document createXml(String rootElementName)
      创建XML文档
      创建的XML默认是utf8编码,修改编码的过程是在toStr和toFile方法里,即XML在转为文本的时候才定义编码
      Parameters:
      rootElementName - 根节点名称
      Returns:
      XML文档
    • createXml

      public static Document createXml(String rootElementName, String namespace)
      创建XML文档
      创建的XML默认是utf8编码,修改编码的过程是在toStr和toFile方法里,即XML在转为文本的时候才定义编码
      Parameters:
      rootElementName - 根节点名称
      namespace - 命名空间,无则传null
      Returns:
      XML文档
      Since:
      5.0.4
    • getRootElement

      public static Element getRootElement(Document doc)
      获得XML文档根节点
      Parameters:
      doc - Document
      Returns:
      根节点
      Since:
      3.0.8
      See Also:
    • getOwnerDocument

      public static Document getOwnerDocument(Node node)
      获取节点所在的Document
      Parameters:
      node - 节点
      Returns:
      Document
      Since:
      5.3.0
    • cleanInvalid

      public static String cleanInvalid(String xmlContent)
      去除XML文本中的无效字符
      Parameters:
      xmlContent - XML文本
      Returns:
      当传入为null时返回null
    • cleanComment

      public static String cleanComment(String xmlContent)
      去除XML文本中的注释内容
      Parameters:
      xmlContent - XML文本
      Returns:
      当传入为null时返回null
      Since:
      5.4.5
    • getElements

      public static List<Element> getElements(Element element, String tagName)
      根据节点名获得子节点列表
      Parameters:
      element - 节点
      tagName - 节点名,如果节点名为空(null或blank),返回所有子节点
      Returns:
      节点列表
    • getElement

      public static Element getElement(Element element, String tagName)
      根据节点名获得第一个子节点
      Parameters:
      element - 节点
      tagName - 节点名
      Returns:
      节点
    • elementText

      public static String elementText(Element element, String tagName)
      根据节点名获得第一个子节点
      Parameters:
      element - 节点
      tagName - 节点名
      Returns:
      节点中的值
    • elementText

      public static String elementText(Element element, String tagName, String defaultValue)
      根据节点名获得第一个子节点
      Parameters:
      element - 节点
      tagName - 节点名
      defaultValue - 默认值
      Returns:
      节点中的值
    • transElements

      public static List<Element> transElements(NodeList nodeList)
      将NodeList转换为Element列表
      Parameters:
      nodeList - NodeList
      Returns:
      Element列表
    • transElements

      public static List<Element> transElements(Element parentEle, NodeList nodeList)
      将NodeList转换为Element列表
      非Element节点将被忽略
      Parameters:
      parentEle - 父节点,如果指定将返回此节点的所有直接子节点,null返回所有就节点
      nodeList - NodeList
      Returns:
      Element列表
    • writeObjectAsXml

      public static void writeObjectAsXml(File dest, Object bean)
      将可序列化的对象转换为XML写入文件,已经存在的文件将被覆盖
      Writes serializable object to a XML file. Existing file will be overwritten
      Parameters:
      dest - 目标文件
      bean - 对象
    • createXPath

      public static XPath createXPath()
      创建XPath
      Xpath相关文章:https://www.ibm.com/developerworks/cn/xml/x-javaxpathapi.html
      Returns:
      XPath
      Since:
      3.2.0
    • getElementByXPath

      public static Element getElementByXPath(String expression, Object source)
      通过XPath方式读取XML节点等信息
      Xpath相关文章:https://www.ibm.com/developerworks/cn/xml/x-javaxpathapi.html
      Parameters:
      expression - XPath表达式
      source - 资源,可以是Docunent、Node节点等
      Returns:
      匹配返回类型的值
      Since:
      4.0.9
    • getNodeListByXPath

      public static NodeList getNodeListByXPath(String expression, Object source)
      通过XPath方式读取XML的NodeList
      Xpath相关文章:https://www.ibm.com/developerworks/cn/xml/x-javaxpathapi.html
      Parameters:
      expression - XPath表达式
      source - 资源,可以是Docunent、Node节点等
      Returns:
      NodeList
      Since:
      4.0.9
    • getNodeByXPath

      public static Node getNodeByXPath(String expression, Object source)
      通过XPath方式读取XML节点等信息
      Xpath相关文章:https://www.ibm.com/developerworks/cn/xml/x-javaxpathapi.html
      Parameters:
      expression - XPath表达式
      source - 资源,可以是Docunent、Node节点等
      Returns:
      匹配返回类型的值
      Since:
      4.0.9
    • getByXPath

      public static Object getByXPath(String expression, Object source, QName returnType)
      通过XPath方式读取XML节点等信息
      Xpath相关文章:https://www.ibm.com/developerworks/cn/xml/x-javaxpathapi.html
      Parameters:
      expression - XPath表达式
      source - 资源,可以是Docunent、Node节点等
      returnType - 返回类型,XPathConstants
      Returns:
      匹配返回类型的值
      Since:
      3.2.0
    • getByXPath

      public static Object getByXPath(String expression, Object source, QName returnType, NamespaceContext nsContext)
      通过XPath方式读取XML节点等信息
      Xpath相关文章:
      https://www.ibm.com/developerworks/cn/xml/x-javaxpathapi.html
      https://www.ibm.com/developerworks/cn/xml/x-nmspccontext/
      Parameters:
      expression - XPath表达式
      source - 资源,可以是Docunent、Node节点等
      returnType - 返回类型,XPathConstants
      nsContext - NamespaceContext
      Returns:
      匹配返回类型的值
      Since:
      5.3.1
    • escape

      public static String escape(String string)
      转义XML特殊字符:
       & (ampersand) 替换为 &amp;
       < (小于) 替换为 &lt;
       > (大于) 替换为 &gt;
       " (双引号) 替换为 &quot;
       
      Parameters:
      string - 被替换的字符串
      Returns:
      替换后的字符串
      Since:
      4.0.8
    • unescape

      public static String unescape(String string)
      反转义XML特殊字符:
      Parameters:
      string - 被替换的字符串
      Returns:
      替换后的字符串
      Since:
      5.0.6
      See Also:
    • xmlToMap

      public static Map<String,Object> xmlToMap(String xmlStr)
      XML格式字符串转换为Map
      Parameters:
      xmlStr - XML字符串
      Returns:
      XML数据转换后的Map
      Since:
      4.0.8
    • xmlToMap

      public static Map<String,Object> xmlToMap(Node node)
      XML格式字符串转换为Map
      Parameters:
      node - XML节点
      Returns:
      XML数据转换后的Map
      Since:
      4.0.8
    • xmlToMap

      public static Map<String,Object> xmlToMap(String xmlStr, Map<String,Object> result)
      XML格式字符串转换为Map
      只支持第一级别的XML,不支持多级XML
      Parameters:
      xmlStr - XML字符串
      result - 结果Map类型
      Returns:
      XML数据转换后的Map
      Since:
      4.0.8
    • xmlToMap

      public static Map<String,Object> xmlToMap(Node node, Map<String,Object> result)
      XML节点转换为Map
      Parameters:
      node - XML节点
      result - 结果Map类型
      Returns:
      XML数据转换后的Map
      Since:
      4.0.8
    • mapToXmlStr

      public static String mapToXmlStr(Map<?,?> data)
      将Map转换为XML格式的字符串
      Parameters:
      data - Map类型数据
      Returns:
      XML格式的字符串
      Since:
      5.1.2
      See Also:
    • mapToXmlStr

      public static String mapToXmlStr(Map<?,?> data, boolean omitXmlDeclaration)
      将Map转换为XML格式的字符串
      Parameters:
      data - Map类型数据
      omitXmlDeclaration - 是否输出 xml Declaration
      Returns:
      XML格式的字符串
      Since:
      5.1.2
      See Also:
    • mapToXmlStr

      public static String mapToXmlStr(Map<?,?> data, String rootName)
      将Map转换为XML格式的字符串
      Parameters:
      data - Map类型数据
      rootName - 根节点名
      Returns:
      XML格式的字符串
      Since:
      4.0.8
      See Also:
    • mapToXmlStr

      public static String mapToXmlStr(Map<?,?> data, String rootName, String namespace)
      将Map转换为XML格式的字符串
      Parameters:
      data - Map类型数据
      rootName - 根节点名
      namespace - 命名空间,可以为null
      Returns:
      XML格式的字符串
      Since:
      5.0.4
      See Also:
    • mapToXmlStr

      public static String mapToXmlStr(Map<?,?> data, String rootName, String namespace, boolean omitXmlDeclaration)
      将Map转换为XML格式的字符串
      Parameters:
      data - Map类型数据
      rootName - 根节点名
      namespace - 命名空间,可以为null
      omitXmlDeclaration - 是否输出 xml Declaration
      Returns:
      XML格式的字符串
      Since:
      5.1.2
      See Also:
    • mapToXmlStr

      public static String mapToXmlStr(Map<?,?> data, String rootName, String namespace, boolean isPretty, boolean omitXmlDeclaration)
      将Map转换为XML格式的字符串
      Parameters:
      data - Map类型数据
      rootName - 根节点名
      namespace - 命名空间,可以为null
      isPretty - 是否格式化输出
      omitXmlDeclaration - 是否输出 xml Declaration
      Returns:
      XML格式的字符串
      Since:
      5.1.2
      See Also:
    • mapToXmlStr

      public static String mapToXmlStr(Map<?,?> data, String rootName, String namespace, String charset, boolean isPretty, boolean omitXmlDeclaration)
      将Map转换为XML格式的字符串
      Parameters:
      data - Map类型数据
      rootName - 根节点名
      namespace - 命名空间,可以为null
      charset - 编码
      isPretty - 是否格式化输出
      omitXmlDeclaration - 是否输出 xml Declaration
      Returns:
      XML格式的字符串
      Since:
      5.1.2
      See Also:
    • mapToXml

      public static Document mapToXml(Map<?,?> data, String rootName)
      将Map转换为XML
      Parameters:
      data - Map类型数据
      rootName - 根节点名
      Returns:
      XML
      Since:
      4.0.9
      See Also:
    • mapToXml

      public static Document mapToXml(Map<?,?> data, String rootName, String namespace)
      将Map转换为XML
      Parameters:
      data - Map类型数据
      rootName - 根节点名
      namespace - 命名空间,可以为null
      Returns:
      XML
      Since:
      5.0.4
      See Also:
    • isElement

      public static boolean isElement(Node node)
      给定节点是否为Element 类型节点
      Parameters:
      node - 节点
      Returns:
      是否为Element 类型节点
      Since:
      4.0.8
    • appendChild

      public static Element appendChild(Node node, String tagName)
      在已有节点上创建子节点
      Parameters:
      node - 节点
      tagName - 标签名
      Returns:
      子节点
      Since:
      4.0.9
    • appendChild

      public static Element appendChild(Node node, String tagName, String namespace)
      在已有节点上创建子节点
      Parameters:
      node - 节点
      tagName - 标签名
      namespace - 命名空间,无传null
      Returns:
      子节点
      Since:
      5.0.4
    • appendText

      public static Node appendText(Node node, CharSequence text)
      创建文本子节点
      Parameters:
      node - 节点
      text - 文本
      Returns:
      子节点
      Since:
      5.3.0
    • append

      public static void append(Node node, Object data)
      追加数据子节点,可以是Map、集合、文本
      Parameters:
      node - 节点
      data - 数据
      Since:
      5.7.10
    • xmlToBean

      public static <T> T xmlToBean(String xml, Class<T> c)
      xml转换成JavaBean
      Type Parameters:
      T - Bean类型
      Parameters:
      xml - XML字符串
      c - Bean类型
      Returns:
      bean
    • xmlToBean

      public static <T> T xmlToBean(Reader reader, Class<T> c)
      Reader中读取XML字符串,并转换为Bean
      Type Parameters:
      T - Bean类型
      Parameters:
      reader - Reader
      c - Bean类
      Returns:
      Bean
    • newDocumentBuilder

      public static DocumentBuilder newDocumentBuilder() throws ParserConfigurationException
      Throws:
      ParserConfigurationException
    • newDocument

      public static Document newDocument() throws ParserConfigurationException
      Throws:
      ParserConfigurationException