名称不能以 '<' 字符十六进制值 0x3c 开头

Posted

技术标签:

【中文标题】名称不能以 \'<\' 字符十六进制值 0x3c 开头【英文标题】:Name cannot begin with the '<' character hexadecimal value 0x3c名称不能以 '<' 字符十六进制值 0x3c 开头 【发布时间】:2021-06-26 06:11:58 【问题描述】:

我正在尝试使用 SOAP 请求从 WebService 获取一些数据。 SOAP 主体应该包含一个 SQL 查询。每当我使用&lt; 字符时,它都会导致SOAPReqBody.LoadXml() 出现上述错误。我该如何解决这个问题?

HttpWebRequest request = CreateSOAPWebRequest();
XmlDocument SOAPReqBody = new XmlDocument();
SOAPReqBody.LoadXml(@"<?xml version=""1.0"" encoding=""utf-8""?>
 <soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">
 <soap:Body>  
    <Query xmlns=""http://LifaOIS.DK/OISService"">
      <UID>" + uid + @"</UID>
      <PWD>" + pwd + @"</PWD>
      <SQL>" + sql + @"</SQL>
      <Meta>" + meta + @"</Meta>
     </Query>
  </soap:Body>  
</soap:Envelope>");

【问题讨论】:

发布的代码是正确的,前提是变量 uid、pwd、sql 和 meta 不包含非法的 xml 字符。请参阅:en.wikipedia.org/wiki/…。只看 5 个 xml 特殊字符。 【参考方案1】:

您是否尝试将sql 包裹在&lt;![CDATA[...]]&gt; 中?

喜欢:

<SQL><![CDATA[" + sql + @"]]></SQL>

代替

<SQL>" + sql + @"</SQL>

更多详情请见What does <![CDATA[]]> in XML mean?。

【讨论】:

我对 一无所知。我刚刚尝试过,它已经解决了这个问题。非常感谢。【参考方案2】:

这很难看,但是如果您确实必须在消息负载中携带 SQL 查询,并且小于 '

WHERE field NOT EQUAL minValue AND field BETWEEN minvalue AND upperValue

请注意,BETWEEN 的 from 和 to 值是包容性的 - 因此需要排除 minValue

【讨论】:

以上是关于名称不能以 '<' 字符十六进制值 0x3c 开头的主要内容,如果未能解决你的问题,请参考以下文章

名称不能以''字符开头,在c#中使用xml字符串的十六进制值0x20 [重复]

名称不能以c#中的''字符,十六进制值0x20开头使用xml String [duplicate]

关于调试WCF时引发的异常XmlException: Name cannot begin with the '<' character, hexadecimal value 0x

System.Xml.XmlException:“':'字符,十六进制值 0x3A,不能包含在名称中。”

Xamarin App 编辑 info.plist 名称不能以“<”字符开头

如何编写CompareTo方法以比较二进制搜索算法中的字符串值