麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > C# > 正文

c#中XML解析文件出錯(cuò)解決方法

2020-01-24 02:31:27
字體:
供稿:網(wǎng)友

1.內(nèi)容中含有xml預(yù)定好的實(shí)體,如“<”和“&”,對(duì)xml來說是禁止使用的,針對(duì)這種字符,解決方式是使用CDATA部件以"<![CDATA[" 標(biāo)記開始,以"]]>"標(biāo)記結(jié)束,是CDATA內(nèi)部內(nèi)容被解析器忽略。具體說明參考《XML CDATA是什么?》。

2.內(nèi)容中含有低位非打印字符,解析時(shí)會(huì)報(bào)錯(cuò):""(十六進(jìn)制值 0x1D)是無效的字符.加載或保存XML時(shí)引發(fā)的異常.System.ArgumentException: “”(十六進(jìn)制值 0x1D)是無效的字符。

出錯(cuò)的原因是內(nèi)容中含有低位非打印字符,處理方法是對(duì)其進(jìn)行過濾,過濾方法為:

return System.Text.RegularExpressions.Regex.Replace(str,@"[/x00-/x08]|[/x0B-/x0C]|[/x0E-/x1F]";

以上兩種情況,第一種較為普遍,第二種遇到情況比較少,在面對(duì)一些用戶輸入數(shù)據(jù)時(shí)生成xml,可以對(duì)xml結(jié)點(diǎn)內(nèi)容執(zhí)行上述過濾,以保證xml文件使用者可以正確解析xml文檔。

以下是詳細(xì)解釋:

“”(十六進(jìn)制值 0x1D)是無效的字符

加載或保存XML時(shí)引發(fā)的異常.System.ArgumentException: “”(十六進(jìn)制值 0x1D)是無效的字符。
產(chǎn)生原因是xml文件中包含低位非打印字符造成的
處理方法:在產(chǎn)生xml文件的時(shí)候,過濾低位非打印字符

把一個(gè)字符串中的 低序位 ASCII 字符 替換成 &#x 字符
轉(zhuǎn)換 ASCII 0 - 8 -> � - 
轉(zhuǎn)換 ASCII 11 - 12 -> -
轉(zhuǎn)換 ASCII 14 - 31 ->  - 


簡單的處理方法
return System.Text.RegularExpressions.Regex.Replace(HttpUtility.HtmlEncode(str),@"[/x00-/x08]|[/x0B-/x0C]|[/x0E-/x1F]", "");

======================================================================================================================================================

復(fù)雜處理

獲取xml時(shí),出現(xiàn)“(十六進(jìn)制值 0x1F)是無效的字符之類Xml異常的解決辦法2008-12-19 10:44最近做新聞采集器,需要獲取很多站點(diǎn)的xml,加載個(gè)別站點(diǎn)經(jīng)常出現(xiàn)“(十六進(jìn)制值 0x1F)是無效的字符”問題,百思不的其解。對(duì)于問題站點(diǎn)xml的處理,開始的思路是既然直接用 XmlDocument對(duì)象的Load()方法不行,就用LoadXML() ,用HttpWebRequest 獲取url讀到流里再轉(zhuǎn)為xml,中間可以加一些非有效字符的過濾處理,但仍然無效,僅僅解決了請(qǐng)求超時(shí)的問題...

問題擱置了1周后,終于在今天解決了。

其實(shí)很簡單,只加一條語句就搞定了

XmlDocument doc = new XmlDocument();

doc.Normalize();

         // 摘要:
        //     將此 XmlNode 下子樹完全深度中的所有 XmlText 節(jié)點(diǎn)都轉(zhuǎn)換成“正?!毙问剑谶@種形式中只有標(biāo)記(即標(biāo)記、注釋、處理指令、CDATA
        //     節(jié)和實(shí)體引用)分隔 XmlText 節(jié)點(diǎn),也就是說,沒有相鄰的 XmlText 節(jié)點(diǎn)。

以下是轉(zhuǎn)一位仁兄的貼:

最近碰到一個(gè)問題,我的一個(gè)把數(shù)據(jù)庫中記錄的信息暴露出來的Web Service調(diào)用時(shí)候出問題了。報(bào)下面的錯(cuò)誤信息:

System.InvalidOperationException was unhandledMessage="XML 文檔(1, 823)中有錯(cuò)誤。"Source="System.Xml" Message="“”(十六進(jìn)制值 0x0E)是無效的字符。 行 1,位置 823。" Source="System.Xml"

當(dāng)這個(gè)錯(cuò)誤發(fā)生時(shí),Web Service 服務(wù)器端不會(huì)有任何錯(cuò)誤,而調(diào)用這個(gè) Web Service 的客戶端則會(huì)報(bào)上述錯(cuò)誤。
是何原因?qū)е碌倪@個(gè)問題呢?
答案很簡單,是WEB Service 暴露的XML文檔中存在低序位非打印 ASCII 字符所致。
我們查看 Web Service 返回的XML 文檔文檔中,會(huì)有下面的XML文檔節(jié):其中的 就是低序位 ASCII 字符。 對(duì)應(yīng)的字符如后:

<Value> 在神奇天地

主站蜘蛛池模板: 久久九九热re6这里有精品 | 欧美wwwwww| 午夜a狂野欧美一区二区 | 国产一级二级毛片 | 久热久操 | 久久色播| 九九精品在线观看视频 | 极品五月天| h视频在线播放 | 久久久免费观看完整版 | 在线成人一区二区 | 高清视频一区二区 | a黄在线观看 | 欧美精品免费一区二区三区 | 精品一区二区在线播放 | 久久日韩在线 | 欧美一级一区二区三区 | 久久精品网站视频 | 欧美精品日日鲁夜夜添 | 国产精品久久久久久久久久了 | 一本色道久久99精品综合蜜臀 | 久久老司机精品视频 | 亚洲精品 在线播放 | 一区在线视频观看 | 国产91精品欧美 | 一级电影在线免费观看 | 久色成人 | 毛片视频网站 | 黄色特级视频 | 国产精品亚洲一区二区三区在线观看 | 久久久久久久久久久久久九 | 黄色影院 | 黄在线看 | 色交视频 | 欧美精品成人一区二区在线观看 | 中文字幕一区二区三区四区 | xxxxxx中国 | 成人在线97 | 久久99精品久久久久久园产越南 | 红杏网站永久免费视频入口 | 亚洲一区二区免费视频 |