java - 将 XML 字符串附加到 Java 中的元素
问题描述
我有一个要求,我需要在 Java 中将 XML 字符串附加到 Element。下面的代码显示了我现在在做什么:
Document doc;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
doc = builder.newDocument();
Element results = doc.createElement("Results");
doc.appendChild(results);
Element row = doc.createElement("Row");
results.appendChild(row);
String columnName = "XML_00805F49916B";
String valueString = "<IBS><Product></Product></IBS>";
Element node = doc.createElement(columnName);
node.appendChild(doc.createTextNode(valueString));
row.appendChild(node);
DOMSource domSource = new DOMSource(doc);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
transformer.setOutputProperty(OutputKeys.METHOD, "xml");
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
StringWriter sw = new StringWriter();
StreamResult sr = new StreamResult(sw);
transformer.transform(domSource, sr);
retMsg = sw.toString();
System.out.println("SQL Return message: " + retMsg);
上面的代码返回输出:
SQL Return message: <Results><Row><XML_00805F49916B><IBS><Product></Product></IBS></XML_00805F49916B></Row></Results>
但是,我希望输出为:
SQL Return message: <Results><Row><XML_00805F49916B><IBS><Product></Product></IBS></XML_00805F49916B></Row></Results>
请问我可以帮助如何获得所需的输出吗?
解决方案
文本节点不是 XML 文档结构的一部分。这只是文字。当涉及到文本节点时,特殊字符<
、>
和&
只是字符,尽管最终的 XML 表示需要对它们进行转义。
您无法通过插入文本节点来实现目标。您需要插入元素。
从您的评论中:
不幸的是,我从外部来源获得了 XML 即 valueString,并且它的模式总是不同的。我需要一种将 XML 字符串值添加到 Element 的通用方法
您可以将任意 XML 内容解析为新的 XML 文档,然后将新文档的根元素导入(复制)到您的文档中:
String columnName = "XML_00805F49916B";
String valueString = "<IBS><Product></Product></IBS>";
Element node = doc.createElement(columnName);
Document valueDoc = builder.parse(
new InputSource(new StringReader(valueString)));
Node valueElement = doc.importNode(valueDoc.getDocumentElement(), true);
node.appendChild(valueElement);
row.appendChild(node);
推荐阅读
- c# - 来自 SQL Server CLR Proc 的 Azure 存储中的 Blob 列表,未获得完整列表
- activemq - 在 C# 中获取 ActiveMQ 队列或接收器中的消息计数
- swift - 如何更改 DCMTK 中的默认网络套接字超时?
- swing - 如何在 JavaFX 应用程序中显示 OpenCV 网络摄像头捕获帧
- ios - SwiftUI - ActionSheet 中的动态按钮?
- sap - 如何在超级账本结构中索引 couchdb
- php - recaptcha v2 的基本服务器集成
- css - CSS 线性渐变和画布线性渐变与不透明度设置不同
- java - 如何使用 Java 跨多个文件内容复制更新?
- c# - 从 C# 中的 onnx 模型读取自定义元数据