所以我知道String#codePointAt(int),但它是由char偏移索引,而不是由代码点偏移索引.
我正在考虑尝试这样的事情:
String#charAt(int)得到char的指数char在高代理范围内
String#codePointAt(int)获取代码点,并将索引增加2char值作为代码点,并将索引递增1但我担心的是
char值或一个值我在.Net中寻找一个通用方法来编码一个用于Xml元素或属性的字符串,当我没有立即找到它时,我感到很惊讶.所以,在我走得太远之前,我可能只是缺少内置函数吗?
假设它确实不存在,我正在整理我自己的通用EncodeForXml(string data)方法,我正在考虑最好的方法.
我正在使用的数据提示整个事情可能包含坏的字符,如&,<,"等.它还可能包含正确转义的实体:&,<和",这意味着只使用一个CDATA部分可能不是最好的主意.这似乎有点笨拙;我最终会得到一个很好的字符串值,可以直接在xml中使用.
我过去使用过正则表达式来捕捉坏的&符号,我想在这种情况下使用它来捕获它们以及第一步,然后对其他字符进行简单的替换.
那么,这可以进一步优化而不会太复杂,有什么我想念的吗?:
Function EncodeForXml(ByVal data As String) As String
Static badAmpersand As new Regex("&(?![a-zA-Z]{2,6};|#[0-9]{2,4};)")
data = badAmpersand.Replace(data, "&")
return data.Replace("<", "<").Replace("""", """).Replace(">", "gt;")
End Function
Run Code Online (Sandbox Code Playgroud)
对不起你所有的C#-only伙计们 - 我真的不在乎我使用哪种语言,但我想让Regex保持静态,你不能在C#中做到这一点而不在方法之外声明它,所以这将是VB .净
最后,我们仍然使用.Net 2.0,但是如果有人可以将最终产品转换为字符串类的扩展方法,那也很酷.
更新前几个响应表明.Net确实有内置的方法来做到这一点.但是现在我已经开始了,我想完成我的EncodeForXml()方法只是为了它的乐趣,所以我仍然在寻找改进的想法.值得注意的是:一个更完整的字符列表应该被编码为实体(可能存储在列表/映射中),并且比在串行中的不可变字符串上执行.Replace()获得更好的性能.
我正在尝试开发XML导出功能,以便我的应用程序用户以XML格式导出他们的数据.我已经准备好这个功能,直到它开始失败了一些情况.然后我意识到这是因为需要编码的一些特殊字符.例如,数据可能包含&或!或%或'或#等等,这需要妥善转义.我想知道是否有可用的通用实用程序可以根据XML规范转义所有特殊字符.我在谷歌上找不到任何东西.
那里有类似的东西吗?或者还有其他办法吗?
这是我用来生成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))); …Run Code Online (Sandbox Code Playgroud) 您好我想从字符串中删除所有无效的XML字符.我想使用string.replace方法的正则表达式.
喜欢
line.replace(regExp,"");
什么是正确的regExp使用?
无效的XML字符是不是这样的一切:
[#x1-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
Run Code Online (Sandbox Code Playgroud)
谢谢.
escapeXml函数正在将ѭѭ转换为ѭ Ѯ 我猜它不应该.我读到的是它只支持五个基本的XML实体(gt,lt,quot,amp,apos).
是否有一个只转换这五个基本xml实体的函数.
我在哪里可以找到这个类StringEscapeUtils 可以自动逃避字符而不是manualy做...在我的搜索上我发现被调用的StringEscapeUtils但我在我的项目中找不到或者我尝试从网上下载但是找不到...有没有办法让我自动完成这样的事情:
String testStr = "< > \" &";
System.out.println("Escaped : " + StringEscapeUtils.escapeHtml(testStr));
Run Code Online (Sandbox Code Playgroud)