我使用WebService将XmlDocument转换为PDF格式。
我发送给Web服务的XmlDocument看起来像这样。
<?xml version="1.0" encoding="utf-16" ?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
...
</fo:root>
我遇到了问题所以我进入调试模式,发现当XmlDocument对象从我的asp网站本身传输到工作在.NET 1.1上的Web服务时看到他的 xml标签。是否有理由删除此标签?它可能是由SOAP响应引起的吗?
除了在文档中手动添加标签之外,还有其他方法吗?
修改
回答John的问题,是的,我的意思是处理指令。它刚刚开始,我想知道为什么因为我用来转换的库不能没有它。如果我手动添加它,它工作正常,但我只是想知道为什么它会消失。
修改2
即使它不是标签,需要XmlDocument的库在没有它的情况下也不起作用,这就是我需要它的原因。除此之外,正确处理文档的其余部分。 Web Reference中生成的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被引用为XmlNode,因为SOAP响应是XmlDocument本身。
我刚把它改成字符串; MyXmlDocument.OuterXml; 这样,一切都保持不变。
答案 0 :(得分:2)
很可能是编码问题。 XML声明声称文档是UTF-16,每个字符是两个字节。在其缺席的情况下,另一个库可能正在假设其他编码。
答案 1 :(得分:0)
您永远不会通过XmlNode
,XmlElement
或XmlDocument
参数向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
。