类 XmlSupport
java.lang.Object
com.midi.his.sdk.esb.XmlSupport
XML 读写工具:安全解析、序列化、节点查找与 CDATA 包装。
解析器统一禁用 DTD 与外部实体,避免平台报文被用作 XXE 入口;文档工厂每次新建,
因为 DocumentBuilder 不是线程安全的。
-
方法概要
修饰符和类型方法说明static ElementappendElement(Document owner, Element parent, String name) 追加无文本的子元素。static ElementappendText(Document owner, Element parent, String name, String text) 追加子元素并设置文本,文本为null时生成空节点。static String读元素属性。列出全部直接子元素;name传"*"时返回所有子元素。static ElementfirstByLocalName(Element root, String localName) 取整个子树中第一个匹配名字的元素,用于跨命名空间前缀查找。static ElementfirstChild(Element parent, String... names) 取第一个直接子元素。static Stringstatic Document创建空文档。static StringDOM 解析出来的文本可能包含多段相邻 CDATA/文本节点,此方法用于把连续空白压回一行, 便于写日志。static Document解析一段 XML,禁止 DOCTYPE 声明与外部实体。static String序列化节点,不带 XML 声明(用于嵌进 CDATA 的业务报文)。static String序列化节点。static String读元素文本;空节点返回空串,节点不存在由调用方处理。static String把文本安全地包进 CDATA:内容里出现]]>时拆分成多段, 样例响应里的]]]]><![CDATA[>正是这种拆分的结果。
-
方法详细资料
-
parse
解析一段 XML,禁止 DOCTYPE 声明与外部实体。- 参数:
xml- 原文- 返回:
- DOM 文档
- 抛出:
HisProtocolException- 内容不是合法 XML
-
serialize
序列化节点,不带 XML 声明(用于嵌进 CDATA 的业务报文)。- 参数:
node- 节点- 返回:
- XML 文本
- 抛出:
HisProtocolException- 序列化失败
-
serialize
序列化节点。- 参数:
node- 节点omitDeclaration- 是否省略<?xml ...?>- 返回:
- XML 文本
- 抛出:
HisProtocolException- 序列化失败
-
newDocument
创建空文档。- 返回:
- 新文档
- 抛出:
HisProtocolException- 工厂初始化失败
-
appendText
追加子元素并设置文本,文本为null时生成空节点。- 参数:
owner- 所属文档parent- 父节点name- 元素名text- 文本值- 返回:
- 新建元素
-
appendElement
追加无文本的子元素。- 参数:
owner- 所属文档parent- 父节点name- 元素名- 返回:
- 新建元素
-
firstChild
取第一个直接子元素。- 参数:
parent- 父节点names- 候选元素名,按顺序尝试- 返回:
- 匹配元素,找不到时
null
-
firstByLocalName
取整个子树中第一个匹配名字的元素,用于跨命名空间前缀查找。- 参数:
root- 根节点localName- 局部名- 返回:
- 匹配元素,找不到时
null
-
children
列出全部直接子元素;name传"*"时返回所有子元素。- 参数:
parent- 父节点name- 元素局部名,或"*"- 返回:
- 元素列表,保持文档顺序
-
text
读元素文本;空节点返回空串,节点不存在由调用方处理。- 参数:
element- 元素,可为null- 返回:
- 文本内容,元素为
null时返回null
-
attr
读元素属性。- 参数:
element- 元素,可为nullname- 属性名- 返回:
- 属性值,缺失时
null
-
localName
- 返回:
- 元素的局部名(忽略前缀)
-
wrapCdata
把文本安全地包进 CDATA:内容里出现]]>时拆分成多段, 样例响应里的]]]]><![CDATA[>正是这种拆分的结果。- 参数:
text- 原文,可为null- 返回:
- CDATA 片段,例如
<![CDATA[a]]]]><![CDATA[>b]]>
-
oneLine
DOM 解析出来的文本可能包含多段相邻 CDATA/文本节点,此方法用于把连续空白压回一行, 便于写日志。- 参数:
text- 原文- 返回:
- 单行文本
-