在Java中生成XML时转义特殊字符

我正在尝试开发XML导出功能,以使我的应用程序用户可以XML格式导出其数据。我已经准备好了该功能并且可以正常工作,直到在某些情况下开始失败。然后我意识到是因为某些特殊字符需要编码。例如,数据可能包含&或!或%或’或#等。等等,需要正确地转义。我想知道是否有通用的实用程序可以按照XML规范转义所有特殊字符。我在Google上找不到任何东西。

已经有类似的东西了吗?或还有其他方法吗?

这是我用来生成XML的代码

Document xmldoc = new DocumentImpl();

Element root = xmldoc.createElement("Report");

Element name= xmldoc.createElement((exportData.getChartName() == null) ? "Report" : exportData.getChartName());

if (exportData.getExportDataList().size() > 0

&& exportData.getExportDataList().get(0) instanceof Vector) {

// First row is the HEADER, i.e name

Vector name = exportData.getExportDataList().get(0);

for (int i = 1; i value = exportData.getExportDataList().get(i);

Element sub_root = xmldoc.createElement("Data");

//I had to remove a for loop from here. StackOverflow description field would not take that. :(

// Insert header row

Element node = xmldoc.createElementNS(null, replaceUnrecognizedChars(name.get(j)));

Node node_value = xmldoc.createTextNode(value.get(j));

node.appendChild(node_value);

sub_root.appendChild(node);

chartName.appendChild(sub_root);

}

}

}

root.appendChild(name);

// Prepare the DOM document for writing

Source source = new DOMSource(root);

// Prepare the output file

Result result = new StreamResult(file);

// Write the DOM document to the file

Transformer xformer = TransformerFactory.newInstance().newTransformer();

xformer.transform(source, result);`

样本XML:

<Data>

<TimeStamp>2010-08-31 00:00:00.0</TimeStamp>

<[Name that needs to be encoded]>0.0</[Name that needs to be encoded]>

<Group_Average>1860.0</Group_Average>

</Data>

回答:

您可以使用apache公共语言库来转义字符串。

org.apache.commons.lang.StringEscapeUtils

String escapedXml = StringEscapeUtils.escapeXml("the data might contain & or ! or % or ' or # etc");

但是,您正在寻找的是一种将任何字符串转换为有效XML标记名称的方法。对于ASCII字符,XML标记名称必须以_:a-zA-Z之一开头,后跟_:a-zA-Z0-9中的任意数量的字符。

我当然相信没有库可以为您执行此操作,因此您必须实现自己的函数以从任何字符串进行转换以匹配此模式,或者将其转换为attritbue的值。

<property name="no more need to be encoded, it should be handled by XML library">0.0</property>

以上是 在Java中生成XML时转义特殊字符 的全部内容, 来源链接: utcz.com/qa/424740.html

回到顶部