2017-07-19 45 views
0

產品供應商正在使用肥皂消息調用我的Web服務,該消息在語法方面不正確。原因是soap消息在載有銷售數據的有效載荷之前有一個多餘的xml聲明。這個接口應該每天傳輸超過500K次交易。撕掉第二個xml聲明時我有什麼選擇,而不會大幅度降低性能? 我不能應用下面的東西,因爲在這種情況下,XML聲明不是在開始。除了xml語法不正確。從soap有效負載中刪除額外的xml聲明

<xsl:output method="xml" omit-xml-declaration="yes" /> 

SOAP消息

<?xml version='1.0' encoding='UTF-8'?> 
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> 
<S:Body> 
<ns2:postTransaction xmlns:ns2="http://v1.ws.abc.dtv/"> 
<rawLogString> 
    <?xml version="1.0" encoding="UTF-8"?> <!--unwanted xml declaration--> 
    <Log><!--elements that carry sale data--> 
    </Log> 
</rawLogString> 
</ns2:postTransaction> 
</S:Body> 
</S:Envelope> 

回答

1

不符合標準的XML或XSL工具將處理您的樣本SOAP消息,因爲它是畸形的:只能有文件中的一個XML聲明,如果有是一個聲明,它必須是文件中的第一件事 - 甚至連空白都不會出現在它之前。

我推斷您的SOAP消息不是由兼容的XML或XSL工具發出的。

我在這一點上的建議是做兩件事情之一:

  1. 與供應商聯繫,並解釋他們的工具發射無效的XML,而這必須是固定的。
  2. 執行您自己的過程以去除不需要的XML聲明。當這樣做時,不能使用XSL來處理整個消息 - 您最好使用基於文本的搜索和替換工具。例如,你可以使用下面的正則表達式來找到有問題的聲明,並與$1代替它會刪除它,同時保持其他內容:

    (>\s+)<\?xml [^>]+> 
    
+1

差不多我的想法,但只是想之前確認我與大傢伙吵架! – chemicalkt2