XML转义字符

vbN*_*bie 2 xml vb.net httpwebrequest

我正在尝试发送POST请求以将一些内容添加到API框中.规则是正文格式应为XML(值必须是XML转义),HTTP方法(发布),要求身份验证(是),请求内容(内容类型:"application/xml")

<entries?
  <entry tag="some_tag">
   <value>XML-escaped-entry belongs here</value>
  </entry>
  <entry tag="some_tag">
   <value>XML-escaped-entry belongs here</value>
....
...

 </entries>
Run Code Online (Sandbox Code Playgroud)

我发送请求如下,并得到400错误的请求错误.当我输入一个值进入时,它工作.

 For i As Integer = 0 To searchItems.Count - (1000 - max)
                data = data + "<entries><entry><value>" & searchItems.Item(i) & "</value></entry></entries>" & vbNewLine
            Next
            If uri.Scheme = uri.UriSchemeHttps Then
                Dim request As HttpWebRequest = HttpWebRequest.Create(uri)
                request.Method = method__1
                request.ContentLength = data.Length
                request.ContentType = "application/xml"
                request.Credentials = New System.Net.NetworkCredential("xxx@xxx.com", "xxxxxx")
                Dim writer As New StreamWriter(request.GetRequestStream)
                writer.Write(data)
                writer.Close()
                Dim oResponse As HttpWebResponse = request.GetResponse()
                Dim reader As New StreamReader(oResponse.GetResponseStream())
                Dim tmp As String = reader.ReadToEnd()
                oResponse.Close()
            End If
Run Code Online (Sandbox Code Playgroud)

附加规则: - 最佳做法是逐步添加和删除条目列表的更改,而不是每次需要更改时删除/重新创建整个列表. - 新的条目放置在队列的顶部以进行轮询,并以LIFO方式处理.

Sch*_*enz 5

您需要在循环期间查找并编码特殊字符.有点像:

 For i As Integer = 0 To searchItems.Count - (1000 - max)
            data = data + "<entries><entry><value>" & encodeEntry(searchItems.Item(i)) & "</value></entry></entries>" & vbNewLine
 Next

 Private Function encodeEntry(ByVal entry As String) As String
     Dim returnValue As String = entry

     ' Replace the special characters
     returnValue = returnValue.Replace("&", "&amp;")
     returnValue = returnValue.Replace("""", "&quot;")
     returnValue = returnValue.Replace("'", "&apos;")
     returnValue = returnValue.Replace("<", "&lt;")
     returnValue = returnValue.Replace(">", "&gt;")

     ' return the escaped string
     return returnValue
 End Function
Run Code Online (Sandbox Code Playgroud)