xml,我拿什么来爱你?

qsbqing 2007-11-12 10:11:49
有人说,xml是水,是空气,程序员当然也离不开水和空气。
请看下面的一个例子:
------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<article>
<author>张三</author>
<body><![CDATA[李四€]]></body>
</article>
------------------------------------------------
死活报错(包含有十六进制字符)。有人说用body Base64加密,这样每次加载时还要解密。
从性能的角度,这样值吗?从google中搜了n条,没有找到答案。


...全文
536 42 打赏 收藏 转发到动态 举报
写回复
用AI写文章
42 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jack_Senlan 2007-11-15
  • 打赏
  • 举报
回复
utf-8只支持ASCII码里的字符,当然显示不了
EricGuzuqiang 2007-11-15
  • 打赏
  • 举报
回复
那个乱乱的是什么咚咚
danjiewu 2007-11-14
  • 打赏
  • 举报
回复
注意
CDATA 节中的内容必须在 XML 内容允许的字符范围内;控制字符和兼容性字符不能通过这种方式转义。

这是MSDN上的说明。所以lz为什么一定要在CData里写这些字符呢?在普通节点里写是没有问题的。
3000sunqin 2007-11-14
  • 打赏
  • 举报
回复
是不是可以将整个对象转成二进制流,或者你使用序列化和反序列化应该不会有这个问题
qsbqing 2007-11-14
  • 打赏
  • 举报
回复
以前是直接存到数据库的,后来因为负载的问题,想改成基于xml的,欢迎大家继续提建议.
gxhuiqh 2007-11-14
  • 打赏
  • 举报
回复
存取和读的时候对特殊字符进行特殊转换
wuxing2006 2007-11-14
  • 打赏
  • 举报
回复
汗,你在保存时转义不就得了,搞这么多事
awen177 2007-11-14
  • 打赏
  • 举报
回复
威尔亨特 2007-11-14
  • 打赏
  • 举报
回复
不支持特殊符号
xiaoku 2007-11-14
  • 打赏
  • 举报
回复
我来学习xml的...
qsbqing 2007-11-14
  • 打赏
  • 举报
回复
问题解决,还是原先的思路,如有更好的想法请回复,过两天结贴.

<?xml version= "1.0" encoding= "UTF-8"?>
<article>
<author> 张三 </author>
<body> <![CDATA[李四€]]> </body>
</article>





private string ConvertHex(string responseXml)
{
UTF8Encoding encoding = new UTF8Encoding();
Byte[] responseByteArr = encoding.GetBytes(responseXml);
for (int i = 0; i < responseByteArr.Length; i++)
{
if (responseByteArr[i] < 32)
{
responseByteArr[i] = 32;
}
}
return encoding.GetString(responseByteArr);
}

protected void Page_Load(object sender, EventArgs e)
{
string FileName = @"D:\Solution\test-utf8.xml";
string xmlstr = "";
string[] s = null;
StringBuilder temp = new StringBuilder();
XmlDocument doc = new XmlDocument();
try{//直接加载xml
doc.Load(FileName);
}catch{//xml可能有十六进制字符,过滤掉这些这符再加载xml字符串
s = File.ReadAllLines(FileName);
for (int i = 0; i < s.Length; i++)
{
temp.Append(s[i]);
}
xmlstr = ConvertHex(temp.ToString());
doc.LoadXml(xmlstr);//重新加载LoadXml not Load
}finally {

}
XmlNodeReader reader = new XmlNodeReader(doc);
Response.Write("作者:");
Response.Write(doc.SelectSingleNode("/article/author").InnerText);
Response.Write("<br><br><br>正文:<br>");
Response.Write(doc.SelectSingleNode("/article/body").InnerText);
}
danjiewu 2007-11-14
  • 打赏
  • 举报
回复
那为什么要放在CData里?
qsbqing 2007-11-14
  • 打赏
  • 举报
回复
我要写一个论坛类似的功能,不是我要写这些内容,用户提交的内容可能会有这类字符,然后导致整个页面都打不开。
zhiang75 2007-11-13
  • 打赏
  • 举报
回复
xml应该是这个

<?xml version="1.0" encoding="UTF-8" ?>
<article>
<author>张三</author>
<body><![CDATA[李四€]]></body>
</article>

zhiang75 2007-11-13
  • 打赏
  • 举报
回复

XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml("<?xml version= \"1.0\" encoding= \"UTF-8\"?> <article></article>");
XmlNode node = xmlDocument.SelectSingleNode("descendant::article");
XmlElement temp = xmlDocument.CreateElement("author");
XmlText temptext = xmlDocument.CreateTextNode("张三");
temp.AppendChild(temptext);
node.AppendChild(temp);

temp = xmlDocument.CreateElement("body");
temptext = xmlDocument.CreateTextNode("<![CDATA[李四€]]>");
temp.AppendChild(temptext);
node.AppendChild(temp);

RETURN
string:<?xml version="1.0" encoding="UTF-8"?><article><author>张三</author><body><![CDATA[李四€]]></body></article>

<?xml version="1.0" encoding="UTF-8"?><article><author>张三</author><body><![CDATA[李四€]]></body></article>
zhiang75 2007-11-13
  • 打赏
  • 举报
回复
.net XML 还是非常强大的LZ的方法不对..

XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml("<?xml version= \"1.0\" encoding= \"UTF-8\"?> <article></article>");
XmlNode node = xmlDocument.SelectSingleNode("descendant::article");
XmlElement temp = xmlDocument.CreateElement("author");
XmlText temptext = xmlDocument.CreateTextNode("张三");
temp.AppendChild(temptext);
node.AppendChild(temp);

temp = xmlDocument.CreateElement("body");
temptext = xmlDocument.CreateTextNode("李四€");
temp.AppendChild(temptext);
node.AppendChild(temp);

RETURN

<?xml version="1.0" encoding="UTF-8" ?>
<article>
<author>张三</author>
<body>李四€</body>
</article>
iloveppmm 2007-11-13
  • 打赏
  • 举报
回复
特殊问题特殊处理
277894613 2007-11-13
  • 打赏
  • 举报
回复
是处理上的问题,不关人家xml的事
那你说人家xml是怎么存图片,怎么存音乐的?

base64
IThurricane 2007-11-13
  • 打赏
  • 举报
回复
特殊字符导致的,估计要特别处理一下了
xiaotian08 2007-11-13
  • 打赏
  • 举报
回复
使用转意字符进行处理
加载更多回复(22)

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧