2015-06-18 62 views
0

我正在寫一個腳本,在Perl中使用兩個XML-RPC的API。他們中的一個工作正常,另一個我總是得到一個空的結果。 與第二個API的供應商聯繫後,他們向我發送了一個PHP示例腳本,以便與API一起運行。我無法找到設置的任何差異,因此一些debbuging後,我發現XML由幾個\ NS發送不同:Perl的XML-RPC輸出格式/模式

<?xml version="1.0"?> 
<methodCall> 
<methodName>solde</methodName> 
<params> 
<param><value><struct> 
<member><name>utilisateur</name><value><string>user</string></value></member> 
<member><name>motDePasse</name><value><string>pass</string></value></member> 
</struct></value> 
</param> 
</params> 
</methodCall> 

這是由Perl腳本(我已經嘗試過XML發送: :RPC,Frontier :: Client,RPC :: XML - 無論如何都沒有運氣)。 PHP腳本(的作品之一)發送這個:

<?xml version="1.0"?> 
<methodCall> 
<methodName>solde</methodName> 
<params> 
<param> 
<value><struct> 
<member><name>identification</name> 
<value><struct> 
<member><name>utilisateur</name> 
<value><string>user</string></value> 
</member> 
<member><name>motdePasse</name> 
<value><string>pass</string></value> 
</member> 
</struct></value> 
</member> 
</struct></value> 
</param> 
</params> 
</methodCall> 

兩個我看到的唯一區別是幾個換行符。我已經用這兩個XML發送了帶有curl的POST請求,並且在#1的情況下,我沒有得到任何結果,如果它#2有效。 顯然,第二API(寫在PHP的BTW)的實施更自命不凡(提醒 - 在API#1它與第一個XML,API#2 - 無結果)。

我能做些什麼,除了生成XML自己,來解決這個問題?有沒有辦法告訴任何一個現有的Perl XML-RPC庫來格式化XML,服務器會喜歡它?

回答

1

自己的XML是完全不同的。參數的內容是正確的

<value> 
    <struct> 
    <member> 
     <name>utilisateur</name> 
     <value> 
     <string>user</string> 
     </value> 
    </member> 
    <member> 
     <name>motdePasse</name> 
     <value> 
     <string>pass</string> 
     </value> 
    </member> 
    </struct> 
</value> 

而是由PHP代碼發送的版本這個包裹在一個名爲結構,這樣

<value> 
    <struct> 
    <member> 
     <name>identification</name> 


     <value> 
     <struct> 
      <member> 
      <name>utilisateur</name> 
      <value> 
       <string>user</string> 
      </value> 
      </member> 
      <member> 
      <name>motdePasse</name> 
      <value> 
       <string>pass</string> 
      </value> 
      </member> 
     </struct> 
     </value> 


    </member> 
    </struct> 
</value> 

我希望這有助於

+0

哇,我有完全錯過了!謝謝,就是這樣,現在它起作用了。 –

+0

好 - 我真的希望換行沒有打破XML,因爲如果它沒有,它不是XML。 – Sobrique

+0

@Sobrique:事實並非如此。這取決於應用程序決定如何處理XML文檔中的空白文本。 XML解析器有義務傳遞所有空白文本元素 – Borodin