0

使用 WinJS 和 Windows 运行时如何创建 SOAP 文档?

作为参考,SOAP 文档的结构应如下所示:

<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
  <soap:Header>
  </soap:Header>
  <soap:Body>
    <m:GetTotals xmlns:m="http://www.example.org/totals">
    </m:GetTotals>
  </soap:Body>
</soap:Envelope>

我在 WinJS 中使用 TypeScript,但我的组合不起作用。目前,我有这段代码:

private _writeHeader() : Windows.Data.Xml.Dom.IXmlElement {
    var xml = this._xmlDocument;
    var env = xml.createElementNS("soap", "Envelope");
    env.setAttributeNS("xmlns", "soap", 
          "http://schemas.xmlsoap.org/soap/envelope/");
    var body = xml.createElementNS("soap", "Body");
    env.appendChild(body);
    xml.appendChild(env);

    return body;
}

产生这个:

<Envelope xmlns="soap" 
          xmlns:ns0="xmlns" 
          ns0:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <Body/>
</Envelope>"

不幸的是,这些XDocument课程不可用。我将在后面插入其他元素Body

(我肯定会对 JavaScript 解决方案感到满意,因为 TypeScript 在这里没有太多帮助。)

4

2 回答 2

1

使用DOMXmlSerializer,可以使用以下代码完成。

    var n = 'http://www.w3.org/2003/05/soap-envelope';
    var e = createElement('soap', 'Envelope', n);
    var h = createElement('soap', 'Header', n);
    e.appendChild(h);
    var body = createElement('soap', 'body', n);
    e.appendChild(body);
    var getTotals = createElement('m', 'GetTotals', 'http://www.example.org/totals');
    body.appendChild(getTotals);
    var string = new XMLSerializer().serializeToString(e);
    console.log(string);

    function createElement(prefix, name, nsp)
    {
        var e;
        var tag = prefix + ':' + name;
        if (nsp)
            e = document.createElementNS(nsp, tag);
        else
            e = document.createElement(tag);

        // without any content, node end tag is not added by the xml serializer.
        var empty = document.createTextNode('\n');
        e.appendChild(empty);
        return e;
    }
于 2013-08-29T05:38:32.107 回答
0

虽然生成的 XML 并不是我想要的,但在使用以下代码时,它在语义上应该是等效的:

private _writeHeader() : Windows.Data.Xml.Dom.IXmlElement {
    var xml = this._xmlDocument;    
    var soapUri = "http://schemas.xmlsoap.org/soap/envelope/";      
    var env = xml.createElementNS(soapUri, "Envelope");           
    var body = xml.createElementNS(soapUri, "Body");
    env.appendChild(body);
    xml.appendChild(env);

    return body;
}

结果是:

<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"><Body/></Envelope>

(如果有人知道如何准确地得到我指定的内容,我会接受你的回答。)

于 2013-08-28T22:28:03.220 回答