小编Ste*_*veH的帖子

如何在XML属性值中处理'\ t'字符?

我似乎在.Net 3.5中的各种XML实现之间发现了一些不一致的东西,而我正在努力找出名义上正确的.

问题实际上很容易重现:

  1. 使用包含'\ t'字符的文本元素创建一个简单的xml文档,并为其指定一个包含'\ t'字符的属性:

    var xmlDoc = new XmlDocument { PreserveWhitespace = false, };
    xmlDoc.LoadXml("<test><text attrib=\"Tab'\t'space' '\">Tab'\t'space' '</text></test>");
    xmlDoc.Save(@"d:\TabTest.xml");
    
    Run Code Online (Sandbox Code Playgroud)

    注意:这意味着XmlDocument本身对属性值中的'\ t'字符非常满意.

  2. 使用新的XmlTextReader加载文档:

    var rawFile = XmlReader.Create(@"D:\TabTest.xml");
    var rawDoc = new XmlDocument();
    rawDoc.Load(rawFile);
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用XmlReader.Create加载文档:

    var rawFile2 = new XmlTextReader(@"D:\TabTest.xml");
    var rawDoc2 = new XmlDocument();
    rawDoc2.Load(rawFile2);
    
    Run Code Online (Sandbox Code Playgroud)
  4. 比较调试器中的文档:

    (rawDoc).InnerXml   "<test><text attrib=\"Tab' 'space' '\">Tab'\t'space' '</text></test>"   string
    (rawDoc2).InnerXml  "<test><text attrib=\"Tab'\t'space' '\">Tab'\t'space' '</text></test>"  string
    
    Run Code Online (Sandbox Code Playgroud)

使用新的XmlTextReader读取的文档是我所期望的,文本值和属性值中的'\ t'都符合预期.但是,如果查看XmlReader.Create读取的文档,您会发现属性值中的'\ t'字符已转换为' '字符.

什么...... !! :-)

经过一段时间的Google搜索,我发现我可以将'\ t'编码为' ' - 如果我在示例XML中使用此而不是'\ t',则两个阅读器都按预期工作.

现在Altova XmlSpy和其他各种XML阅读器似乎对属性值中的'\ t'字符非常满意,我的问题是处理这个问题的正确方法是什么?

我应该编写带有'\ t'字符的XML文件,这些字符在XmlReader.Create等属性值中编码,或者是其他XML工具是否正确,'\ t'字符是否有效且XmlReader.Create是否已损坏? …

.net c# xml

5
推荐指数
1
解决办法
5918
查看次数

NetMQ 未处理异常最佳实践

我使用 NetMQ 进行客户端/服务器通信,使用 Pub/Sub 获取价格数据,使用 Req/Res 进行 C&C 定价。它工作得很好,只是我看到 NetMQ 库内部发生了随机且不可重现的异常。

我目前在 Windows Server 2008R2/20012R2 上的 .Net v4.7.2 堆栈上使用 NetMQ v4.0.1.6。

例外情况包括:

  • NetMQ.FaultException @ NetMQ.Msg.Close()
  • System.ArgumentOutOfRangeException @ NetMQ.Core.Patterns.Utils.ArrayExtensions.Swap[]
  • System.IndexOutOfRangeException @ NetMQ.Core.Utils.YQueue`1[]/NetMQ.Core.Patterns.Utils.Trie.Check()
  • System.Net.Sockets.SocketException @ NetMQ.Core.Mailbox.TryRecv()/NetMQ.Core.Mailbox.Send()
  • System.NullReferenceException @ NetMQ.Core.Patterns.Utils.Trie.ApplyHelper()/NetMQ.Core.Patterns.Utils.Trie.Check()
  • System.ObjectDisposeException @ NetMQ.Core.SocketBase.CheckDispose()

并且都发生在 NetMQ.NetMQPoller.RunPoller() 或 NetMQ.Core.Utils.Proactor.Loop() 中,我不知道如何捕获和缓解它们。

使用 NetMQ 强化服务/应用程序以防止此类异常导致服务瘫痪的正确方法是什么?

.net c# zeromq netmq

5
推荐指数
1
解决办法
1085
查看次数

标签 统计

.net ×2

c# ×2

netmq ×1

xml ×1

zeromq ×1