使用DOM解析XML时如何获取节点的XML字符串值
获取XML节点的XML字符串值(Java DOM实现)
你已经能定位到目标XML节点了,接下来要把它转换成XML字符串其实很简单——Java的DOM API本身没有直接提供这个方法,但我们可以借助Transformer类轻松实现,下面是具体的步骤和代码示例:
具体实现思路
- 确保你已经成功获取到目标
Node对象(比如你提到的<test>节点) - 使用
TransformerFactory创建Transformer实例,它负责DOM节点到XML字符串的转换 - 可选配置输出参数(比如是否缩进、编码格式),让输出更易读
- 通过
StringWriter捕获转换后的XML内容,最终得到字符串
完整代码示例
import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import java.io.StringWriter; import org.w3c.dom.Node; // 假设你已经通过DOM API获取到了目标<test>节点 Node testNode = ...; // 替换成你实际获取节点的代码,比如list.item(index) try { // 初始化转换工具 TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); // 可选配置:开启缩进、指定编码,让输出更友好 transformer.setOutputProperty(javax.xml.transform.OutputKeys.INDENT, "yes"); transformer.setOutputProperty(javax.xml.transform.OutputKeys.ENCODING, "UTF-8"); // 用StringWriter捕获转换后的XML内容 StringWriter writer = new StringWriter(); transformer.transform(new DOMSource(testNode), new StreamResult(writer)); // 这里就是你要的节点XML字符串 String nodeXmlString = writer.getBuffer().toString(); System.out.println(nodeXmlString); } catch (Exception e) { e.printStackTrace(); }
代码说明
DOMSource:包装你的目标节点,作为转换的输入源StreamResult + StringWriter:把转换后的XML输出写入字符串,而不是文件或控制台- 缩进配置是可选的,如果不需要格式化,去掉
setOutputProperty即可得到紧凑的一行XML
针对你给出的示例,运行这段代码后,nodeXmlString的结果会是:
<test> <tag>foobar</tag> <tag>foobar2</tag> </test>
小提示
- 记得先判断目标节点是否为
null,避免空指针异常 - 如果不需要保留XML声明(比如
<?xml version="1.0" encoding="UTF-8"?>),可以添加配置:transformer.setOutputProperty(javax.xml.transform.OutputKeys.OMIT_XML_DECLARATION, "yes")
内容的提问来源于stack exchange,提问作者Awadesh
相关产品推荐
相关产品推荐

