2

我对 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 页面而不是服务。

4

2 回答 2

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。

于 2013-02-06T07:24:24.053 回答
0

这是读取 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
    }
}
于 2013-02-05T12:35:10.197 回答