通过http发送xml会丢失缩进

时间:2014-09-22 18:13:24

标签: xml vb.net

我有一个相当大的XML文件,我想通过http发送到设备。我正在使用的方法是创建Xmldocument(称为doc),将outerXML转换为字符串,并使用HttpWebResponse发送它。

以下是XML的一部分:

  <MotionDetection>
   <id>1</id>
   <enabled>true</enabled>
   <samplingInterval>2</samplingInterval>
   <startTriggerTime>500</startTriggerTime>
   <endTriggerTime>500</endTriggerTime>
   <regionType>grid</regionType>
     <Grid>
      <rowGranularity>15</rowGranularity>
      <columnGranularity>22</columnGranularity>
  </Grid>
</MotionDetection>

问题:每当我通过互联网发送我的代码时,它都不接受它(给我一个错误的请求响应),因为xml缺少“indents”或vbCrlfs导致wireshark嗅探器看起来像一个xml而不是一堆串在一起的字符串。

有没有办法使用httpwebresponse发送它,以便那些留在请求中? 当然,除了打破字符串并通过“手”插入它?

这是我当前的代码,因为我也尝试使用上传客户端而不是httpwebrequest。

        Dim doc As New Xml.XmlDocument
        doc.Load("test.xml")
       Try
            Dim url = "http://" & currentCamera.ipaddr & "/Custom/Motion"
            Dim client As New WebClient
            client.Credentials = New Net.NetworkCredential(currentCamera.Username, currentCamera.Password)
            Dim sentXml As Byte() = System.Text.Encoding.ASCII.GetBytes(doc.OuterXml)
            Dim response2 As Byte() = client.UploadData(url, "PUT", sentXml)

        Catch ex As Exception

        End Try

2 个答案:

答案 0 :(得分:0)

我发现的解决方案与编码有关。特别是这一行:

  Dim sentXml As Byte() = System.Text.Encoding.ASCII.GetBytes(doc.OuterXml)

通过将编码从ASCII更改为UT8,设备接受了xml并实现了更改。即。

   Dim sentXml As Byte() = System.Text.Encoding.UTF8.GetBytes(doc.OuterXml)

显然,这是网络设备更容易接受的方法。

答案 1 :(得分:0)

删除空格不应该破坏您的XML文件,但编码错误。顺便说一句,删除空格也不错,它会为你节省一些网络数据。有效载荷越小越好。