2011-04-07 70 views
1

我使用WebService將XmlDocument轉換爲PDF。WebService從我的XmlDocument中刪除<xml>標記

我發送到Web服務的XmlDocument看起來像這樣。

<?xml version="1.0" encoding="utf-16" ?> 
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
... 
</fo:root> 

我有一個問題,所以我在調試國防部去發現,當XmlDocument對象是從我的ASP網站本身轉移到Web服務,基於.NET 1.1的作品看到他 XML標記。是否有這個標籤被刪除的原因?它可能是由SOAP響應引起的嗎?

有沒有辦法在手動添加標籤迴文檔?

編輯

要回答John的問題,是我的意思是處理指令。它剛剛熄滅,我想知道爲什麼,因爲我用來轉換的庫在沒有它的情況下無法正常工作。如果我手動添加它,它工作正常,但我只是想知道它爲什麼消失。

編輯2

即使它不是一個標籤,需要XmlDocument的只是不無它的工作庫就是爲什麼我需要它。除此之外,文檔的其餘部分正確處理。從Web引用生成的Reference.cs看起來是這樣的調用方法:

/// <remarks/> 
    [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/GeneratePdfFromXml", RequestNamespace="http://tempuri.org", ResponseNamespace="http://tempuri.org", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] 
    [return: System.Xml.Serialization.XmlElementAttribute(DataType="base64Binary")] 
    public byte[] GeneratePdfFromXml(XmlNode FormattedObjectXml) { 
     object[] results = this.Invoke("GeneratePdfFromXml", new object[] { 
        FormattedObjectXml}); 
     return ((byte[])(results[0])); 
    } 

這是相同的問題,因爲另一個問題我有,其中XmlDocument的作爲,因爲SOAP響應XmlNode的引用是的XmlDocument本身。

我只是將其更改爲一個字符串; MyXmlDocument.OuterXml;這樣,一切都保持不變,沒有問題。

+0

你指的是哪個「XML」標籤? ''?這是一個處理指令,而不是一個標籤。它不應該造成任何問題。是什麼讓你認爲這是問題? – 2011-04-07 19:17:49

+1

再次,這不是一個標籤,它是一個處理指令。請顯示正在刪除處理說明的服務操作的簽名(功能標題)。有機會,它應該被刪除,但讓我們看看。 – 2011-04-07 19:46:47

+0

@約翰桑德斯 - 不是一個PI,雖然它看起來像一個。參見[http://www.developerfusion。「XML聲明是一個處理指令?」下的「com/samplechapter/1704/beginning-xml/10 /」) XML規範清楚地顯示了XML聲明[http://www.w3.org/TR/2008/REC-xml-20081126/#NT-XMLDecl]和處理指令[http://www.w3。 org/TR/2008/REC-xml-20081126 /#sec-pi] – lavinio 2011-04-07 19:52:53

回答

2

這很可能是一個編碼問題。 XML聲明聲明文檔是UTF-16,每個字符兩個字節。另一個圖書館可能會假設,如果沒有其他編碼的話。

+0

我認爲這就是爲什麼指令丟失時庫失敗。 – David 2011-04-07 20:00:36

0

您將永遠不會收到通過XmlNode,XmlElementXmlDocument參數傳遞給ASMX服務的XML聲明或處理指令。如果你仔細想想,理由很明顯。 SOAP請求將如下所示:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" > 
    <SOAP-ENV:Body> 
     <parameter> 
      <?xml version="1.0" encoding="utf-16" ?> 
      <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
      </fo:root> 
     </parameter> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

但是XML聲明只能出現在文檔的開頭,所以這是無效的。

正如您發現的,解決方案是將此XML作爲字符串發送。使您的參數類型爲string,並使用XmlNode.OuterXml