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

时间:2021-03-30 08:31:25

标签: c# xml soap

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

2 个答案:

答案 0 :(得分:0)

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

WHERE field NOT EQUAL minValue AND field BETWEEN minvalue AND upperValue

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

答案 1 :(得分:0)

您是否尝试过将 sql 包裹在 <![CDATA[...]]> 中?

喜欢:

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

代替

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

有关详细信息,请参阅 What does <![CDATA[]]> in XML mean?

相关问题