c#WinForm将SOAP字符串反序列化为树视图控件

时间:2017-03-13 07:44:43

标签: c# winforms soap treeview

我有这样的SOAP响应:

<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">

<soap:Body xmlns:m="http://www.example.org/stock">
  <m:GetStockPriceResponse>
    <m:Price>34.5</m:Price>
  </m:GetStockPriceResponse>
</soap:Body>

</soap:Envelope>

我尝试使用以下代码将此响应填充到winform treeView控件中。

private void DeserializeToTreeViewSoap(string value)
{
    if (string.IsNullOrEmpty(value) || !value.IsValidXml()) return;

    BeginUpdate();
    var xDoc = new XmlDocument();
    xDoc.LoadXml(value);

    Nodes.Clear();
    Nodes.Add(new TreeNode(xDoc.DocumentElement.Name));

    var currentNode = Nodes[0];
    AddTreeNodeSoap(xDoc.DocumentElement, currentNode);
    EndUpdate();
    ExpandAll();
}

private void AddTreeNodeSoap(XmlNode soapNode, TreeNode treeNode)
{
    if (soapNode.HasChildNodes)
    {
        for (var x = 0; x <= soapNode.ChildNodes.Count - 1; x++)
        {
            var xNode = soapNode.ChildNodes[x];
            treeNode.Nodes.Add(new TreeNode(xNode.Name));
            var currentNode = treeNode.Nodes[x];
            AddTreeNodeSoap(xNode, currentNode);
        }
    }
    else
        treeNode.Text = soapNode.OuterXml.Trim();
}

我的问题是我丢失了以下信息:

xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding"
xmlns:m="http://www.example.org/stock"

这是因为XmlNode.Name属性不包含此信息,我使用该名称来创建节点。

我无法在XmlNode中看到包含缺失信息的另一个属性。

如何创建包含信息的节点?

0 个答案:

没有答案