缓解维度成员被的暗Xml字符导致的询问错误

题材讲述

近来在类型受到遇这么个状态,在进行维度成员的时,服务端抛来了”The server sent an unrecognizable response”的怪,看了生殊细节,给来之错误信息是”hexadecimal value 0x01, is
an invalid character. Line 1, position 6771. (System.Xml)”(十六迈入制0x01是无用字符,行1,位置6771)

 

自碰到的实事求是案例

某型蒙,代理商名称被冒出了一个结余的内码,导致Analyzer在拖代理商名称上总是没数量,而且于举行筛选上报错。

图片 1

 

题目迎刃而解

出现这样问题之案由在,微软的Analysis Service使用XMLA(XML for Analysis)语言与其它客户端进行交互,包括实行

Mdx、DMX、Sql等。如果服务端返回的积极分子(关键列、名字、标题、成员值等)含有一些非打印字符的语句,那么尽管无法直接以Xml

备受代表,这样即便会见造成客户端无法解析返回的Xml响应,而出现上述的错。

Analysis Service在Process的早晚,出于性能考虑默认情况下是不见面对数据开展这种Xml非法字符的检测。不过Analysis
Service也

提供了一个装开关,允许我们在拍卖等检测这些不法字符,并召开一定之规范化处理。在BIDS中,我们开辟维度属性之属性面板

出一个
InvalidXmlCharacters的安装,如下图所示:

图片 2

默认情况下该价值也Preserve,也就算是保留这些伪字符。它还时有发生另两独选择。Remove表示移除这些不法字符,只保留合法

的Xml字符。Replace表示用问号?替换非法字符,一个非法字符对应一个问号。 在实质上应用被,InvalidXmlCharacters需要依据

色的其实情形开展设置。如果对数据的这种清理好放ETL阶段,那么最好坐ETL 阶段,因为这么好加快Analysis
Service处

理的进度。否则便只能于Process的时光做检测了。对于Remove和Replace,我较支持于选Remove。因为既已是免打印字

切了,用问号代替固然能与另外数区分开来,但是对于最终用户来说,大部分动静下只见面追加他们的迷惑而已。

 

删去非法Xml字符

在Xml
1.0规范(第五版本,06/11/2008)的2.2等同节约被干了Xml合法字符的限定:

/* any Unicode character, excluding the
surrogate blocks, FFFE, and FFFF. */
Char ::=
#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]

标准被建议,所有Xml处理器都当正确处理上述范围之这些字符。

咱们好以处理字符串的早晚下正则表达式剔除掉非法的Xml字符,以保证最终进Analysis
Service的字符都是Xml合法字符。

[^\x09\x0A\x0D\x20-\uD7FF\uE000-\uFFFD\u10000-\u10FFFF]

对应的C#代码如下,出于性能考虑,可以以函数内部的正则表达式存储吗成员变量,并安装为预编译模式。

public static String
StripInvalidXmlChars(String input)
{
    Regex re = new Regex(@”[^\x09\x0A\x0D\x20-\uD7FF\uE000-\uFFFD\u10000-\u10FFFF]”);
    return re.Replace(input,
“”);
}

起源为喻笔记(Wiz)

相关文章

网站地图xml地图