【问题标题】:Can't pass XML using WSDL and escaping characters无法使用 WSDL 和转义字符传递 XML
【发布时间】:2020-10-25 15:48:45
【问题描述】:

我真的很难找到一种在不转义 C# 中的字符的情况下传递 XML 字符串的方法。我在下面有一个字符串,需要将其作为字符串传递给对 WSDL 的调用。

<MyElement ElementId='xxxxxx'><Segments><Segment Status='1' SegmentId='xx1'/><Segment Status='1' 
SegmentId='xx2'/></Segments></MyElement>

如果我尝试传递它有一个字符串,则字符正在转义字符,例如“>”。我在 .NET 控制台应用程序中导入了 WSDL。这是我在 chrome 中使用 Wizdler 工具时看到的上面那个字符串的内容。

整个消息是这样的。

所以我的问题是如何在 C# 中使用 WSDL,甚至手动进行调用以使其工作

using (var client = new MemberService.MemberWebServiceSoapClient())
 {               
   var xml = "<MyElement ElementId='xxxxxxx'><Segments><Segment Status='1' SegmentId='xx1'/><Segment 
   Status='1' SegmentId='xx2'/></Segments></MyElement>"
   var send = client.Moving(xml);
 }

【问题讨论】:

    标签: c# .net xml wsdl


    【解决方案1】:

    使用 Xml Linq:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Xml;
    using System.Xml.Linq;
    using System.IO;
    namespace ConsoleApplication1
    {
        class Program
        {
            const string FILENAME = @"c:\temp\test.xml";
            static void Main(string[] args)
            {
                string envelope = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                                  "<Envelope xmlns=\"http://schemas.xmlsoap.org/soap/envelope/\">" +
                                     "<Body>" +
                                        "<Moving xmlns=\"http://www.retalix.com/HQLWebServices\">" +
                                        "</Moving>" +
                                     "</Body>" +
                                  "</Envelope>";
    
                XDocument doc = XDocument.Parse(envelope);
                XElement moving = doc.Descendants().Where(x => x.Name.LocalName == "Moving").FirstOrDefault();
                XNamespace ns = moving.GetDefaultNamespace();
                string elementId = "xxxxxx";
                List<Segment> segments = new List<Segment>() {
                    new Segment() { id = "xx1", status = 1},
                    new Segment() { id = "xx2", status = 1}
                };
    
                XElement xMyElement = new XElement(ns + "MyElement", new XAttribute("ElementId", elementId));
                moving.Add(xMyElement);
                XElement xSegments = new XElement(ns + "Segments");
                xMyElement.Add(xSegments);
    
                foreach (Segment segment in segments)
                {
                    XElement xSegment = new XElement("Segment", new object[] {
                        new XAttribute("Status", segment.status),
                        new XAttribute("SegmentId", segment.id)
                    });
                    xSegments.Add(xSegment);
                }
    
                string sendXml = doc.ToString();
            }
        }
        public class Segment
        {
            public string id { get; set; }
            public int status { get; set; }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      • 2013-11-07
      • 2011-06-25
      • 2011-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多