【问题标题】:How do I open XML from link in razor?如何从剃刀中的链接打开 XML?
【发布时间】:2013-11-06 22:44:01
【问题描述】:

任务很简单,使用 XML 连接到另一个 Web 服务。
在当前页面(经典 ASP)中,我们使用以下代码:

zoekpcode=UCASE(Request.Querystring("zoekpcode")) <-- postal-code
zoeknr=Request.Querystring("zoeknr") <-- house-number

PC=Trim(Replace(zoekpcode," ",""))
NR=Trim(Replace(zoeknr," ",""))

strGetAddress="https://ws1.webservices.nl/rpc/get-simplexml/addressReeksPostcodeSearch/*~*/*~*/" & PC & NR

set xml = Server.CreateObject("Microsoft.XMLHTTP")
xml.open "GET", strGetAddress , false
xml.send ""
strStatus = xml.Status
If Len(PC)>5 and Len(NR)>0 Then
    strRetval = Trim(xml.responseText)
End If

set xml = nothing

'Do something with the result string

其中一个可能的链接可能是:https://ws1.webservices.nl/rpc/get-simplexml/addressReeksPostcodeSearch/~/~/1097ZD49

目前我正在寻找一种在 razor (C#) 中执行此操作的方法,但我似乎能够在 Google 上找到的只是如何在 JavaScript 中执行此操作
我已经尝试过(大多数组合)以下术语:

  • 剃刀
  • xmlhttp
  • comobject
  • 来自 url 的 XML
  • -javascript

结果主要是关于 JavaScript 或剃须刀的。
根据其他结果(如搜索 comobjects in razor),似乎 Razor 中没有 comobject。

我确实在 stackoverflow 上找到了这个问题 (How to use XML with WebMatrix razor (C#)),它似乎(部分)回答了我的问题,但是否也可以通过链接到外部系统(提到的网络服务)?

【问题讨论】:

  • 为什么它首先使用 XMLHTTP 而不仅仅是一个简单的 HttpWebRequest?当然可以在 razor 的嵌入式 c# 代码中使用。
  • 我不清楚使用 XMLHTTP 的原因。简短的搜索导致知道 HttpWebRequest 可以在 razor 中使用。在测试期间,我发现它会产生一个字符串。您知道是否可以使用解链接问题中使用的 XmlDocument 中的字符串?
  • @Ralf 感谢您朝着正确的方向前进。我将发布我自己的代码作为答案(但不标记它)。如果您想将您的回复作为答案发布,我会标记那个。
  • 我不喜欢这种名誉追捕的事情。所以继续向我们展示你做了什么。
  • 我会这样做,但我必须等到 8 小时后要求发布它作为答案......但这里是:dl.dropboxusercontent.com/u/4420555/…

标签: c# asp.net-mvc-4 razor xmlhttprequest webservices.nl


【解决方案1】:

我在这里介绍了 Razor 网页中 Web 服务的使用:http://www.mikesdotnetting.com/Article/209/Consuming-Feeds-And-Web-Services-In-Razor-Web-Pages

如果您的 Web 服务是 SOAP 服务,您最好使用 Visual Studio(免费的 Express 版本很好)来添加服务引用,然后从那里开始工作。否则,您可以使用 Linq To XML 将 XML 直接加载到 XDocument 中,如文章中的 ATOM 示例所示:

var xml = XDoxument.Load("https://ws1.webservices.nl/rpc/get-simplexml/blah/blah");

然后使用 System.Xml.Linq API 来查询文档。

【讨论】:

  • 我认为这个答案非常好,因为它比我的更容易和可读。然而,这种方式给出了一个错误,指出 XML 无效。我会将此标记为其他人使用的答案。
【解决方案2】:

Ralf的帮助下,我得出了以下代码:

public static XmlDocument getaddress(string pcode, string number){
    string serverresponse = "";
    string getlocation = "https://ws1.webservices.nl/rpc/get-simplexml/addressReeksPostcodeSearch/*~*/*~*/" + Request.QueryString["PCODE"] + Request.QueryString["NR"];

    HttpWebRequest req = (HttpWebRequest) WebRequest.Create(getlocation);
    using (var r = req.GetResponse()) {
        using (var s = new StreamReader(r.GetResponseStream())) {
            serverresponse = s.ReadToEnd();
        }
    }

    XmlDocument loader = new XmlDocument();
    loader.LoadXml(serverresponse);
    return loader;
}

public static string getvalue(XmlDocument document, string node){
    string returnval = "";
    var results = document.SelectNodes(node);
    foreach(XmlNode aNode in results){
        returnval = returnval + "," + aNode.InnerText;
    }

    return returnval.Substring(1);
}

【讨论】:

    猜你喜欢
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多