缓解维度成员中的违法Xml字符导致的询问错误

题材讲述

近日在品种中境遇那样个情景,在开展维度成员的时候,服务端抛出了”The server sent an unrecognizable response”的十一分,看了下足够细节,给出的错误消息是”hexadecimal value 0x0一, is
an invalid character. Line 一, position 677一. (System.Xml)”(十陆进制0x0壹是不行字符,行1,地点6771)

 

本身赶上的真实案例

某项目中,代理商名称中冒出了二个剩下的内码,导致Analyzer在拖代理商名称时候总是未有多少,而且在做筛选时候报错。

图片 1

 

题材一挥而就

并发那样难点的缘故在于,微软的Analysis Service使用XMLA(XML for Analysis)语言和此外客户端实行互动,包罗实施

Mdx、DMX、Sql等。假设服务端重返的成员(关键列、名字、题目、成员值等)含有壹些非打字与印刷字符的话,那么就不可能直接在Xml

中象征,这样就会招致客户端无法解析再次回到的Xml响应,而出现上述的一无可取。

Analysis Service在Process的时候,出于品质思索暗中认可情形下是不会对数据开始展览这种Xml不合法字符的检查测试。然而Analysis
瑟维斯也

提供了一个装置开关,允许大家在拍卖阶段检查测试那个不法字符,并做一定的规范化处理。在BIDS中,大家开拓维度属性的习性面板

有3个InvalidXmlCharacters的装置,如下图所示:

图片 2

暗许情状下其值为Preserve,也正是保留那个不法字符。它还有此外七个挑选。Remove表示移除这个地下字符,只保留合法

的Xml字符。Replace表示使用问号?替换非法字符,一个地下字符对应二个问号。 在其实使用中,InvalidXmlCharacters要求依照

品种的骨子里意况开始展览安装。借使对数据的那种清理得以松手ETL阶段,那么最佳放置ETL 阶段,因为那样能够加速Analysis
Service处

理的快慢。不然就不得不在Process的时候做检查评定了。对于Remove和Replace,笔者相比赞成于选拔Remove。因为既然已经是非打印字

符了,用问号代替尽管能够和其他数据区分开来,不过对于最终用户来说,超过57%动静下只会追加她们的吸引而已。

 

剔除违规Xml字符

Xml
1.0规范
(第陆版,06/150%00八)的二.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地图