Mus*_*usa 1 linq asp.net linq-to-xml
这是一个新手问题,所以对我很好:)
如何在ASP.NET中使用php API?此API返回XML文档.它还能够返回JSON.
输出如下所示
XML
<?xml version="1.0" encoding="UTF-8"?>
<Address>
<Country>US</Country>
<City>Seattle</City>
<Result>Done</Result>
</Address>
Run Code Online (Sandbox Code Playgroud)
JSON
{
"CountryCode" : "US",
"City" : "Seattle",
"Result" : "Done"
}
Run Code Online (Sandbox Code Playgroud)
例如:有一个服务http://someservice.com/name_query.php?pincode= ,它接受pincode并返回一个XML文档.
我可以使用LINQtoXML并使用它.请使用XML和使用JSON的示例非常有用.
首先是XML vs JSON
如果你打算使用API来执行一些AJAX查询(例如,当用户点击一个链接/图像来查询API,例如,你想要改变那个链接的颜色,女巫会告诉用户它没关系或者不...因为你不需要解析XML而去寻找JSON
如果你正在做"灌木丛"背后的一切,你只需要提供在后面的代码中处理的数据,那么使用XML.
使用简单,使用WebClient对象
private string GetDocument(string myPin) {
String url = String.Format("http://someservice.com/name_query.php?pincode={0}", myPin);
WebClient client = new WebClient();
client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0;)"); // pass as Internet Explorer 7.0
Stream data = client.OpenRead(url);
StreamReader reader = new StreamReader(data);
s = reader.ReadToEnd();
data.Close();
reader.Close();
return s;
}
Run Code Online (Sandbox Code Playgroud)
此时,您拥有从字符串API中获取的整个XML,现在您只需要处理XML,例如:
想象一下输出是一个XML文档,如:
<Hit dbId="400179221" systemId="115">
<WorksiteDbId>200105072</WorksiteDbId>
<Subscribed>false</Subscribed>
<FirstName>Klaus Holse</FirstName>
<LastName>Andersen</LastName>
<Status>Active</Status>
<MainJobTitle>CEO (Managing Director, General Manager, Owner)</MainJobTitle>
<WorksiteName>Microsoft Development Center Copenhagen ApS </WorksiteName>
<Department></Department>
<Address></Address>
<Zipcode></Zipcode>
<City></City>
<WorksitePhone></WorksitePhone>
<TypeCode>TY10</TypeCode>
<WorksiteStatus>Active</WorksiteStatus>
</Hit>
Run Code Online (Sandbox Code Playgroud)
处理文档信息的方法如下:
private void processDocument(string myPin) {
String xml = GetDocument(myPin);
XmlTextReader reader = new XmlTextReader(new StringReader(xml));
XmlDocument document = new XmlDocument();
document.Load(reader);
XmlNodeList list = document.SelectNodes("/XMLNode/XMLSubNode");
foreach (XmlNode node in list) // loop through all nodes
{
foreach (XmlAttribute att in node.Attributes) // loop through all attributes
{
switch (att.Name.ToLower())
{
case "dbid": myClass.DbID = Int32.Parse(att.InnerText); break;
case "systemid": myClass.SystemID = Int32.Parse(att.InnerText); break;
default: break;
}
}
foreach (XmlNode subnode in node.ChildNodes) // loop through all subnodes
{
switch (subnode.Name.ToLower()) // check what node has what
{
case "subscribed": myClass.Subscribed = bool.Parse(subnode.InnerText); break;
case "firstname": myClass.Firstname = subnode.InnerText; break;
case "lastname": myClass.Lastname = subnode.InnerText; break;
case "status": myClass.Status = subnode.InnerText; break;
...
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
你将myClass填满API返回的所有值...
正如你在第一行中提到的......这是新手:)这是一个很好的方式让你理解获取和使用XML数据的概念......在你理解了这一部分后,你将很容易地转向LINQ2XML :)
我希望这有帮助...
添加
因为我现在只看到你有XML的输出,这里是使用精确XML的processDocument方法
XML:
<?xml version="1.0" encoding="UTF-8"?>
<Address>
<Country>US</Country>
<City>Seattle</City>
<Result>Done</Result>
</Address>
Run Code Online (Sandbox Code Playgroud)
方法:
private void processDocument(string myPin) {
String xml = GetDocument(myPin);
XmlTextReader reader = new XmlTextReader(new StringReader(xml));
XmlDocument document = new XmlDocument();
document.Load(reader);
XmlNodeList list = document.SelectNodes("/Address");
foreach (XmlNode node in list) // loop through all nodes
{
foreach (XmlNode subnode in node.ChildNodes) // loop through all subnodes
{
switch (subnode.Name.ToLower()) // check what node has what
{
case "country": myClass.Country =subnode.InnerText; break;
case "city": myClass.City= subnode.InnerText; break;
case "result": myClass.Result = subnode.InnerText; break;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
记得要检查错误,比如传递一组错误的数据,以便正确处理错误.
:-)
| 归档时间: |
|
| 查看次数: |
3369 次 |
| 最近记录: |