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



我正在尝试使用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>");

您是否尝试过用<![CDATA[...]]>包装sql

类似:

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

代替

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

查看What dos<![CDATA[>在XML中是什么意思?了解更多详细信息。

这很难看,但如果您真的必须在消息负载中携带SQL查询,并且小于'<'字符是XML中的一个问题,并且您无法控制有效负载的打包和拆包,那么您可能需要考虑使用BETWEEN。。。

WHERE field NOT EQUAL minValue AND field BETWEEN minvalue AND upperValue

请注意,BETWEEN的from和to值包含在内,因此需要排除minValue

相关内容

最新更新