当前位置:编程学习 > C#/ASP.NET >>

XmlDocument加载有特殊字符的xml字符串怎么解决呢?

有一user.txt(utf8)文件中有如下内容
<UserInfo id="1" name="mingming" noteUrl="http://www.xxx.com/userdetail.aspx?userid=1&t=2&s=4" />
<UserInfo id="2" name="mingming2" noteUrl="http://www.xxx.com/userdetail.aspx?userid=2&t=2&s=5" />
...


C# Code

string xmlStr=File.ReadAllText("user.txt",Encoding.UTF8);
XmlDocument xmlDoc=new XmlDocument();
xmlDoc.LoadXml("<xml>"+xmlStr+"</xml>");
//报错,说“=是意外的标记...”,其实是noteUrl属性里面的&特殊字符导致的,这个问题应该如何解决呢?




--------------------编程问答-------------------- XmlDocument d = new XmlDocument();    
d.LoadXml("<?xml version=\"1.0\" encoding=\"utf-8\"?>..");     
d.Save("XMLFile1.xml");
转义字符& & 和  --------------------编程问答--------------------
 doc.LoadXml("<xml><![CDATA[" + strXml + "]]></xml>");
 XmlNodeList nodes = doc.SelectNodes("//xml");
 foreach (XmlNode node in nodes)
     Console.WriteLine(node.InnerText);


但是被<![CDATA[...]]> 的内容不会被作为Xml解析。。。 --------------------编程问答-------------------- 嗯,楼上的可以。 --------------------编程问答--------------------
引用 2 楼 fangxinggood 的回复:
C# code
 doc.LoadXml("<xml><![CDATA[" + strXml + "]]></xml>");
 XmlNodeList nodes = doc.SelectNodes("//xml");
 foreach (XmlNode node in nodes)
     Console.WriteLine(node.InnerText);


但是被<![CD……

这样啥都没了,我的数据在节点的属性里面呢 --------------------编程问答-------------------- 不是"="的问题,是属性里的"&"导致的。

如果可以的话,直接Replace掉"&" -> "#",再替换回来就可以了。

strXml = strXml.Replace("&", "#");
XmlDocument doc = new XmlDocument();
doc.LoadXml("<xml>" + strXml + "</xml>");
XmlNodeList nodes = doc.SelectNodes("//UserInfo");
foreach (XmlNode node in nodes)
    Console.WriteLine(node.Attributes["noteUrl"].Value);
Console.Read();
--------------------编程问答-------------------- 或者考虑用正则表达式取。
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,