名称不能以 '<' 字符十六进制值 0x3c 开头
Posted
技术标签:
【中文标题】名称不能以 \'<\' 字符十六进制值 0x3c 开头【英文标题】:Name cannot begin with the '<' character hexadecimal value 0x3c名称不能以 '<' 字符十六进制值 0x3c 开头 【发布时间】:2021-06-26 06:11:58 【问题描述】:我正在尝试使用 SOAP 请求从 WebService 获取一些数据。 SOAP 主体应该包含一个 SQL 查询。每当我使用<
字符时,它都会导致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
包裹在<![CDATA[...]]>
中?
喜欢:
<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,不能包含在名称中。”