【问题标题】:Reading a posted XML file in a c# webservice在 c# webservice 中读取已发布的 XML 文件
【发布时间】:2013-02-05 12:25:10
【问题描述】:

我对 c# 中的 web 服务非常陌生。

我将 XML 发布到具有以下功能的 Web 服务中:

public static XmlDocument PostXMLTransaction(string URL, XmlDocument XMLDoc)
        {
            //Declare XMLResponse document
        XmlDocument XMLResponse = null;

        //Declare an HTTP-specific implementation of the WebRequest class.
        HttpWebRequest objHttpWebRequest;

    //Declare an HTTP-specific implementation of the WebResponse class
    HttpWebResponse objHttpWebResponse = null;

    //Declare a generic view of a sequence of bytes
    Stream objRequestStream = null;
    Stream objResponseStream = null;

    //Declare XMLReader
    XmlTextReader objXMLReader;

    //Creates an HttpWebRequest for the specified URL.
    objHttpWebRequest = (HttpWebRequest)WebRequest.Create(URL);

    try
    {
        //---------- Start HttpRequest

        //Set HttpWebRequest properties
        byte[] bytes;
        bytes = System.Text.Encoding.ASCII.GetBytes(XMLDoc.InnerXml);
        objHttpWebRequest.Method = "POST";
        objHttpWebRequest.ContentLength = bytes.Length;
        objHttpWebRequest.ContentType = "text/xml; encoding='utf-8'";

        //Get Stream object
        objRequestStream = objHttpWebRequest.GetRequestStream();

        //Writes a sequence of bytes to the current stream
        objRequestStream.Write(bytes, 0, bytes.Length);

        //Close stream
        objRequestStream.Close();

        //---------- End HttpRequest

        //Sends the HttpWebRequest, and waits for a response.
        objHttpWebResponse = (HttpWebResponse)objHttpWebRequest.GetResponse();

        //---------- Start HttpResponse
        if (objHttpWebResponse.StatusCode == HttpStatusCode.OK)
        {
            //Get response stream
            objResponseStream = objHttpWebResponse.GetResponseStream();

            //Load response stream into XMLReader
            objXMLReader = new XmlTextReader(objResponseStream);

            //Declare XMLDocument
            XmlDocument xmldoc = new XmlDocument();
            xmldoc.Load(objXMLReader);

            //Set XMLResponse object returned from XMLReader
            XMLResponse = xmldoc;

            //Close XMLReader
            objXMLReader.Close();
        }

        //Close HttpWebResponse
        objHttpWebResponse.Close();
    }
    catch (WebException we)
    {
        //TODO: Add custom exception handling
        throw new Exception(we.Message);
    }
    catch (Exception ex)
    {
        throw new Exception(ex.Message);
    }
    finally
    {
        //Close connections
        objRequestStream.Close();
        objResponseStream.Close();
        objHttpWebResponse.Close();

        //Release objects
        objXMLReader = null;
        objRequestStream = null;
        objResponseStream = null;
        objHttpWebResponse = null;
        objHttpWebRequest = null;
    }
    //Return
    return XMLResponse;
}

现在我如何将这个 XML 读入由 url 参数指定的 web 服务中的 XmlDocument。我不确定是否可以将数据发布到网络服务,如果我错了,请纠正我

我已经使用这种方法将 xml 发布到 aspx 页面而不是服务。

【问题讨论】:

    标签: c# web-services post xml-parsing


    【解决方案1】:

    我找到了解决办法

    [WebMethod]
    public string sendXliff()
    {
        XmlDocument xmldoc = new XmlDocument();
        //if (Request.InputStream != null)
        if(HttpContext.Current.Request.InputStream!=null)
        {
    
            StreamReader stream = new StreamReader(HttpContext.Current.Request.InputStream);
            string xmls = stream.ReadToEnd();  // added to view content of input stream
            //XDocument xmlInput = XDocument.Parse(xmls);
            xmldoc.LoadXml(xmls);
            XmlReaderSettings settings = new XmlReaderSettings();
            settings.Schemas.Add(null, "XSD LOCATION");
            settings.ValidationType = ValidationType.Schema;
            XmlReader rdr = XmlReader.Create(new StringReader(xmldoc.InnerXml), settings);
            while (rdr.Read()) { }
        }
        try
        {
            XmlNodeList xmlnode = xmldoc.GetElementsByTagName("ID");
            var sid = xmlnode[0].FirstChild.Value;
        }
        catch (Exception ex)
        {
        }
    
        return "OK";
    }
    

    这会读取输入流,然后将读取的数据转换为 XmlDocument。然后我可以从中解析 XML。

    【讨论】:

      【解决方案2】:

      这是读取 XML 文档的简单示例。如果是单节点则使用XmlNode

      XmlDocument xmldoc = PostXMLTransaction(string URL, XmlDocument XMLDoc) // call to your code for xml document
      XmlNode node= xmldoc.SelectSingleNode("you xml node path here");
      if(node != null)
      {
         var str = node.InnerText;
      }
      

      如果是节点列表则使用XmlNodeList

      XmlNodeList nodes = xmlDoc.SelectNodes("you xml node path here");
      if(nodes != null)
      {
          foreach (XmlNode node in nodes)
          {
               --code here
          }
      }
      

      【讨论】:

      • 谢谢,我需要这个,但我想知道如何在 web 服务中阅读这个发布的 xml 文档。
      • 你是什么意思?您想在回复后阅读一次吗?
      • 不是在响应之后,如您所见,我正在将 XML 文件发布到 Web 服务中,我需要在服务中读取此 XML。
      • 感谢@DON 的回复,我得到了解决方案,我已将其添加为答案。我有这个自定义 Web 服务,我正在向其发布数据。所以我想阅读这个 web 服务中发布的 XML。
      • 你能告诉我如何指定 XML 节点路径吗?这将非常有帮助
      猜你喜欢
      • 2021-02-10
      • 1970-01-01
      • 2019-04-15
      • 1970-01-01
      • 1970-01-01
      • 2021-04-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多