c# url传参不能包含html标签,c#解析包含HTML特殊字符的字符串XElement

在客户端的服务器+ GWT上使用.NET c#,我有一个Web窗体,它接受用户输入,然后构建一个XML字符串并将其存储在数据库中。然后我需要从数据库中读取它,通过tcp将它发送到手持设备,并将其解析为XElement。一切运作良好,直到您从Word中复制和粘贴文本或在这种情况下脱颖而出,当我尝试这样做:c#解析包含HTML特殊字符的字符串XElement

XElement.parse(str);

它抛出一个异常:

'.', hexadecimal value 0x00, is an invalid character. Line 132, position 111.

例字符,将导致此问题是正确的撇号字符(0x2019)。现在可能会有一大堆特殊字符可能从excel/word复制粘贴等。处理此问题的最佳方法是什么?下面是我如何构建从流串:

protected CallResult callUsingSocketClass(string methodName, params Action[] addParameters)

{ WebServicesClient.Debug.DebugMessage(WebServicesClient.Debug.MASK_ENTRY_EXIT, “++调用({0},...)”,方法名);

if (this.OnTransferring != null)

{

if (!this.OnTransferring())

{

return null;

}

}

CallParameters parameters = new CallParameters(this, methodName);

foreach (var addParameter in addParameters)

{

addParameter(parameters);

}

string post = this.CreatePost(parameters);

WebServicesClient.Debug.DebugMessage(WebServicesClient.Debug.MASK_RPC_CALL, "RPC(Method={0}, host={1}, port={2}, post='{3}')", methodName, this.Host, this.Port, post);

byte[] postBytes = Encoding.UTF8.GetBytes(post);

//

// Send the request and wait for the reply.

//

char[] replyContentChars = null;

for (int attempts = 0; attempts < 3; attempts++)

{

Socket socket = null;

try

{

WebServicesClient.Debug.DebugMessage(WebServicesClient.Debug.MASK_RPC_CALL, "RPC - creating socket for RPC call...");

if (this.OnTransferring != null)

{

if (!this.OnTransferring())

{

return null;

}

}

string hostID = this.Host;

if (this.HostIPAddress != null)

{

hostID = this.HostIPAddress;

}

using (socket = this.connectToServer(hostID, this.Port))

{

if (socket == null)

{

return null;

}

if (this.OnTransferring != null)

{

if (!this.OnTransferring())

{

return null;

}

}

WebServicesClient.Debug.DebugMessage(WebServicesClient.Debug.MASK_RPC_CALL, "RPC - socket created!");

WebServicesClient.Debug.DebugMessage(WebServicesClient.Debug.MASK_RPC_CALL, "RPC - communicating with server...");

WebServicesClient.Debug.DebugMessage(WebServicesClient.Debug.MASK_RPC_CALL, "RPC - writing post...");

this.sendDataToServer(socket, postBytes);

int replyLength = -1;

if (this.OnTransferring != null)

{

if (!this.OnTransferring())

{

return null;

}

}

WebServicesClient.Debug.DebugMessage(WebServicesClient.Debug.MASK_RPC_CALL, "RPC - reading reply...");

using (var reader = this.receiveStreamFromServer(socket))

{

if (this.OnTransferring != null)

{

if (!this.OnTransferring())

{

socket.Close();

socket = null;

return null;

}

}

for (; ;)

{

string lineRaw = reader.ReadLine().Trim();

string line = lineRaw.ToLowerInvariant();

if (line.StartsWith("content-length:"))

{

replyLength = int.Parse(line.Substring(15));

}

else if (line == "")

{

if (replyLength < 0)

{

throw new InvalidOperationException("Reply hasn't specified content-length");

}

break;

}

else

{

if (this.CookieJar != null)

{

this.CookieJar.ProcessFromServer(lineRaw);

}

}

}

// Content starts here

replyContentChars = new char[replyLength];

int replyRecv = 0;

do

{

int charsRecv = reader.Read(replyContentChars, replyRecv, replyLength - replyRecv);

if (charsRecv <= 0)

{

break;

}

replyRecv += charsRecv;

} while (replyRecv < replyLength);

//int charsRecv = reader.Read(replyContentChars, 0, replyLength);

if (replyRecv != replyLength)

{

untime.Logger.Logger.Error("Web Service call '{0}' received {1} bytes, header indicated {2} bytes", methodName, replyRecv, replyLength);

throw new InvalidOperationException(String.Format("Have not received all of reply data - received {0} bytes, expected {1}", replyRecv, replyLength));

}

}

socket.Close();

socket = null;

}

}

catch (Exception e)

{

WebServicesClient.Debug.DebugMessage(WebServicesClient.Debug.MASK_RPC_CALL, "RPC - exception thrown - {0} [{1},{2}]", e.Message, e.Source, e.StackTrace);

}

finally

{

if (socket != null)

{

socket.Close();

socket = null;

}

}

if (replyContentChars != null)

{

break;

}

if (this.OnTransferring != null)

{

if (!this.OnTransferring())

{

return null;

}

}

}

//

// Verify that data has been received.

//

if (replyContentChars == null)

{

return null;

}

if (this.OnTransferring != null)

{

if (!this.OnTransferring())

{

return null;

}

}

//

// Process the received data.

//

string replyContent = new string(replyContentChars);

WebServicesClient.Debug.DebugMessage(WebServicesClient.Debug.MASK_RPC_CALL, "RPC(Method={0}, replyContent='{1}')", methodName, replyContent);

XElement xReplyContent = XElement.Parse(replyContent);

var xReplyBody = xReplyContent.Element(nsSoap + "Body");

var xFault = xReplyBody.Element(nsSoap + "Fault");

if (xFault != null)

{

// Something has gone wrong on the server

var xFaultCode = xFault.Element(nsSoap + "Code");

var xFaultReason = xFault.Element(nsSoap + "Reason");

untime.Logger.Logger.Error("Web Service call to method '{0}' failed: Code='{1}', Reason='{2}'", methodName, (string)xFaultCode, (string)xFaultReason);

string faultCode = (string)xFaultCode;

var codeParts = faultCode.Split(':');

XmlQualifiedName xmlQualifiedName;

if (codeParts.Length == 2)

{

xmlQualifiedName = new XmlQualifiedName(codeParts[1], codeParts[0]);

}

else

{

xmlQualifiedName = new XmlQualifiedName(faultCode);

}

throw new SoapException((string)xFaultReason, xmlQualifiedName);

}

var xResponse = xReplyBody.Element(this.nsArgs + (methodName + "Response"));

var xResult = xResponse.Element(this.nsArgs + (methodName + "Result"));

if (this.OnTransferring != null)

{

if (!this.OnTransferring())

{

return null;

}

}

var result = new CallResult(xResult);

return result;

}

2011-03-28

Shahid

+0

代码不完整。 'replyLength'在哪里定义?在这个例子中你有一个无尽的'for'循环。 –

2011-03-29 10:03:41

+0

好的,我已经粘贴了现在在这里完成这项工作的方法。从第70行开始,你可以看到我如何建立字符串。 –

2011-03-29 10:17:21

+0

你从WebServicesClient.Debug.DebugMessage(WebServicesClient.Debug.MASK_RPC_CALL,“RPC(Method = {0},replyContent ='{1}')”,methodName,replyContent)获得了什么输出结果?' –

2011-03-29 10:28:29

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/560342.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Altium Designer20 PCB封装库制作

出现如下界面 如果说找不到这个十字&#xff0c;可以按如下方法重新找到 SMA-KE封装 设置里面可以调整焊盘和孔的大小形状。 如果说想要切换默认单位&#xff0c;以mm为单位 不选中焊盘&#xff0c;然后点击properties。 量出距离 然后发现有小数&#xff0c;由于每一格移…

html字符串变量,字符串变量中的Python HTML

我使用python中的FPDF通过一个函数生成PDF格式的发票。我使用一个字符串变量在HTML中构建一个表&#xff0c;并通过一个列表循环&#xff0c;该列表具有填充表标记行的条形码。在我遇到的问题是&#xff0c;当我尝试生成PDF时&#xff0c;总是得到这个TypeError TypeError: str…

Altium Designer20 PCB板子绘制

版层 top layer 顶层 bottom layer 底层 设置板子大小 布局 过孔 top layer层连到bottom layer层。通过via连接。 设置线宽 在design rules里可以设置线宽。 右键new rule 可以新增线宽&#xff0c;电源设置成20mil 还可以设置很多其他的线宽 修改安全距离 安全…

2021年香河一中高考成绩查询,2021年廊坊高考状元名单公布,廊坊文理科状元是谁多少分...

2019年廊坊高考状元名单公布,廊坊文理科状元是谁多少分高考不是唯一的出路&#xff0c;但对于大多数普通家庭来说是最好的出路。很多普通职工家庭辛辛苦苦将孩子养大供其读书&#xff0c;就是为了有朝一日能金榜题名。当然也有的小康富裕之家&#xff0c;可能高考只是一个“试练…

指定位置输出字符串

题目 习题11-5 指定位置输出字符串 (20 分) 本题要求实现一个函数&#xff0c;对给定的一个字符串和两个字符&#xff0c;打印出给定字符串中从与第一个字符匹配的位置开始到与第二个字符匹配的位置之间的所有字符。 函数接口定义&#xff1a; char *match( char *s, char ch…

计算机科学陈国华,科学网—模式识别与智能系统是个什么专业? - 晏燕华的博文...

模式识别与智能系统是个什么专业&#xff1f;2011年3月12日星期六从上学期起&#xff0c;就时常听到研三的师姐们在抱怨&#xff0c;说当初真不应该报模式识别与智能系统这个专业&#xff0c;现在找工作一点也不好。无论是考公务员还是去事业单位&#xff0c;投去简历后&#x…

删除字符串中的指定字符

题目 习题8-6 删除字符 (20 分) 本题要求实现一个删除字符串中的指定字符的简单函数。 函数接口定义&#xff1a; void delchar( char *str, char c ); 其中char *str是传入的字符串&#xff0c;c是待删除的字符。函数delchar的功能是将字符串str中出现的所有c字符删除。 输…

计算机硬件知识教学的信息化手段,《计算机硬件组成》教学设计

《计算机硬件组成》教学设计导语&#xff1a;计算机课程的教学设计你听说过了吗?如果没有&#xff0c;你可以看看下面这篇文章&#xff0c;是关于《计算机硬件组成》的教学设计。一、 前端分析(一)教材内容分析这节课是高中信息技术教材第一册基础知识中的一节&#xff0c;在教…

找出不是两个数组共有的元素

题目 练习7-4 找出不是两个数组共有的元素 (20 分) 给定两个整型数组&#xff0c;本题要求找出不是两者共有的元素。 输入格式: 输入分别在两行中给出两个整型数组&#xff0c;每行先给出正整数N&#xff08;≤20&#xff09;&#xff0c;随后是N个整数&#xff0c;其间以空格…

vue组件中嵌套html,vue2.0怎么用组件自定义标签实现组件的嵌套?

想用这种方式实现组件嵌套&#xff1a;目前实现的方式&#xff1a;是在app-content.vue中的template中嵌套的index.htmlmain.jsimport Vue from ../node_modules/vue/dist/vue;import app from ./app.js;new Vue(app);app.jsimport content from ../components/app-content.vue…

80x86及Pentium指令系统立即数 寄存器 目标地址寻址 操作数在存储器中寻址

80x86及Pentium指令系统 位(bit)&#xff1a;每一位只有两种状态0或1。计算机能表示的最小数据单位。字节(Byte)&#xff1a;8位二进制数为一个字节。计算机基本存储单元内容用字节表示。字(Word)&#xff1a;PC常将2个字节定义为一个字&#xff0c;一个字为16位二进制数。微处…

计算机跨考土壤学,[北京林业大学]2005年土壤学复试办法_跨考网

&#xff3b;北京林业大学&#xff3d;2005年土壤学复试办法根据学校研究生院招生处关于落实《教育部关于做好2003年招收攻读硕士学位研究生工作的通知》通知的精神&#xff0c;土壤学科制定了本学科的《硕士研究生入学考试复试办法》。一、复试小组的组成原则和人数复式小组由…

信号与系统 傅里叶变换 拉普拉斯变换 z变换所有公式和性质 三个变换的联系 整理

这是我考研整理的笔记。基本上涵盖了信号与系统三大变换所有重要的公式。 1.傅里叶变换 2.拉普拉斯变换 3.Z变换 4.三大变换的关系

html表格支持响应,将表格响应转换为HTML表格

我试图将Fusion Table SQL响应转换为基本的HTML表格。这既适用于搜索引擎饲料&#xff0c;也适用于谷歌电子表格和它们的importhtml功能。将表格响应转换为HTML表格打开反应到表中的foreach都是一次调高一些不寻常的反应&#xff0c;就像1个字符&#xff1f;此外&#xff0c;答…

c语言内存分配与释放 不同类别变量的内存分配和释放的区别

1.不同变量使用内存的区别 静态存储类别的变量&#xff1a;内存数量在编译时确定&#xff0c;程序开始执行时创建&#xff0c;程序结束时销毁。(static、const)自动存储类别的变量&#xff1a;程序进入变量定义所在块时存在&#xff0c;离开块时销毁。新创建的变量按顺序加入内…

学计算机的一开学叫要带电脑吗,大一新生开学需要带电脑吗?辅导员给出建议,学生需提前了解...

高考已经落下帷幕&#xff0c;学生们在等待成绩的这段时间&#xff0c;可以适当的放松一些。其实考试成绩还未出来之前&#xff0c;很多同学心里都有底了。所以也开始考虑自己想要报考的专业与院校&#xff0c;甚至有些学生已经开始准备自己上大学需要带的各种用品。很多学生在…

方阵循环右移

题目 练习7-8 方阵循环右移 (20 分) 本题要求编写程序&#xff0c;将给定nn方阵中的每个元素循环向右移m个位置&#xff0c;即将第0、1、⋯、n−1列变换为第n−m、n−m1、⋯、n−1、0、1、⋯、n−m−1列。 输入格式&#xff1a; 输入第一行给出两个正整数m和n&#xff08;1≤…

奥鹏17计算机应用基础离线,奥鹏《计算机应用基础》离线

期末作业考核《计算机应用基础》满分 100分一、判断对错(每小题1分&#xff0c;共10分)(√)1&#xff0e;冯.诺依曼提出的计算机体系结构奠定了现代计算机的结构理论基础。()2&#xff0e;DOS操作系统是一个单用户多任务操作系统。(√)3&#xff0e;没有装配软件系统的计算机不…

计算机专业对口升学模拟试题,2010对口升学模拟试题计算机专理论综合

对口升学模拟试题计算机专理论综合专业 计 算 机 学号 姓名 班级________________ 密 封 线2010年隆回九中计算机专业对口升学模拟试题计算机专业综合试题分第Ⅰ卷(选择题)和第Ⅱ卷(非选择题)两部分。满分390分&#xff0c;考试时间150分钟。第Ⅰ卷(选择题 共130分)注意事项&am…

c语言使用指针在被调函数中改变主调函数的变量 地址运算符 间接运算符

1.指针 用于存储变量的地址 指针是一个值为内存地址的变量。 2.&运算符(地址运算符) &后跟一个变量名&#xff0c;给出变量的地址 &a&#xff0c;表示变量a的地址3.*运算符(间接运算符/解引用运算符) *后跟一个指针名或地址&#xff0c;给出存储在指针指向地…