2014-09-22 73 views
0

我有一個相當大的XML文件,我想通過http發送到設備。我正在使用的方法是創建Xmldocument(稱爲doc),將outerXML轉換爲字符串,並使用HttpWebResponse發送它。通過http發送xml失去縮進

這裏是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是缺少導致wireshark嗅探器看起來像xml的「縮進」或vbCrlfs,而不是一堆被砸碎在一起的字符串。

有沒有辦法使用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 
+1

在XML中丟失空白似乎不會導致錯誤。它可能是你有一個無用的空格字符,作爲XML元素之外的空格和空格。嘗試使用可以理解XML的編輯器(如Notepad ++)查看您要發送的XML。還可以獲取XML工具插件,其中包含一些QA工具和漂亮的打印格式,可幫助您查找錯誤。將XML保存到文件並在IE中查看可能會顯示錯誤。 – rheitzman 2014-09-22 21:58:26

+0

'Dim sentXml = File.ReadAllBytes(「test.xml」)''? – 2014-09-24 00:01:46

回答

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) 

顯然這是網絡設備更爲接受的方法。

0

刪除空格不應該破壞你的XML文件,但編碼錯誤會。順便說一句,移除空格不錯,它會爲你節省一些網絡數據。有效載荷越小越好。