使用参数过滤属性(XPath-LINQ to XML)
Filter on an Attribute (XPath-LINQ to XML) by using parameter
此代码无效
public HttpResponseMessage Get(string par)
{
String JsonData, JsonFromXML;
XElement root = XElement.Load("http://www.mywebsite.com/mapdata_xml.xml");
IEnumerable<XElement> address =
from el in root.Elements("marker")
where (string) el.Attribute("province") == par
orderby (string)el.Attribute("name")
select el;
var XMLData = "";
foreach (XElement el in address)
XMLData = XMLData + el;
//XMLData = "<markers>" + XMLData + "</markers>";
XmlDocument xd = new XmlDocument();
xd.LoadXml("<markers>" + XMLData + "</markers>");
JsonFromXML = JsonConvert.SerializeXmlNode(xd);
JsonFromXML = JsonFromXML.Remove(0, 11);
JsonFromXML = JsonFromXML.Substring(0, JsonFromXML.Length - 1);
JsonData = JsonFromXML.Replace("\"@", "\"");
return new HttpResponseMessage()
{
Content = new StringContent(JsonData)
};
}
网络 API : http://localhost:55607/api/Test?par=%22Pursat%22
参数:par
问题:我有一个 Web API (http://localhost:55607/api/Test?par=%22Pursat%22)。我想将参数 "Pursat" 传递给 ASP.Net (public HttpResponseMessage Get(string par) name "Par")。然后我什么也得不到。但是,当我这样使用时(where (string) el.Attribute("province") == "Pursat"),我可以从我的代码中获取数据。
这段代码运行良好
public HttpResponseMessage Get(string par)
{
String JsonData, JsonFromXML;
XElement root = XElement.Load("http://www.mywebsite.com/mapdata_xml.xml");
IEnumerable<XElement> address =
from el in root.Elements("marker")
where (string) el.Attribute("province") == "Pursat"
orderby (string)el.Attribute("name")
select el;
var XMLData = "";
foreach (XElement el in address)
XMLData = XMLData + el;
//XMLData = "<markers>" + XMLData + "</markers>";
XmlDocument xd = new XmlDocument();
xd.LoadXml("<markers>" + XMLData + "</markers>");
JsonFromXML = JsonConvert.SerializeXmlNode(xd);
JsonFromXML = JsonFromXML.Remove(0, 11);
JsonFromXML = JsonFromXML.Substring(0, JsonFromXML.Length - 1);
JsonData = JsonFromXML.Replace("\"@", "\"");
return new HttpResponseMessage()
{
Content = new StringContent(JsonData)
};
}
我想通过参数"par"查询数据而不是固定数据"Pursat"。
你知道如何解决这个问题吗?
您似乎在传递带有双引号的值(HTML 编码中的 %22 = ")。所以实际上,您查询中的 where 看起来像这样:
where (string) el.Attribute("province") == ""Pursat""
而如果你这样称呼它:
http://localhost:55607/api/Test?par=Pursat
您的 where 子句如下所示:
where (string) el.Attribute("province") == "Pursat"
此代码无效
public HttpResponseMessage Get(string par) { String JsonData, JsonFromXML; XElement root = XElement.Load("http://www.mywebsite.com/mapdata_xml.xml"); IEnumerable<XElement> address = from el in root.Elements("marker") where (string) el.Attribute("province") == par orderby (string)el.Attribute("name") select el; var XMLData = ""; foreach (XElement el in address) XMLData = XMLData + el; //XMLData = "<markers>" + XMLData + "</markers>"; XmlDocument xd = new XmlDocument(); xd.LoadXml("<markers>" + XMLData + "</markers>"); JsonFromXML = JsonConvert.SerializeXmlNode(xd); JsonFromXML = JsonFromXML.Remove(0, 11); JsonFromXML = JsonFromXML.Substring(0, JsonFromXML.Length - 1); JsonData = JsonFromXML.Replace("\"@", "\""); return new HttpResponseMessage() { Content = new StringContent(JsonData) }; }
网络 API : http://localhost:55607/api/Test?par=%22Pursat%22
参数:par
问题:我有一个 Web API (http://localhost:55607/api/Test?par=%22Pursat%22)。我想将参数 "Pursat" 传递给 ASP.Net (public HttpResponseMessage Get(string par) name "Par")。然后我什么也得不到。但是,当我这样使用时(where (string) el.Attribute("province") == "Pursat"),我可以从我的代码中获取数据。
这段代码运行良好
public HttpResponseMessage Get(string par) { String JsonData, JsonFromXML; XElement root = XElement.Load("http://www.mywebsite.com/mapdata_xml.xml"); IEnumerable<XElement> address = from el in root.Elements("marker") where (string) el.Attribute("province") == "Pursat" orderby (string)el.Attribute("name") select el; var XMLData = ""; foreach (XElement el in address) XMLData = XMLData + el; //XMLData = "<markers>" + XMLData + "</markers>"; XmlDocument xd = new XmlDocument(); xd.LoadXml("<markers>" + XMLData + "</markers>"); JsonFromXML = JsonConvert.SerializeXmlNode(xd); JsonFromXML = JsonFromXML.Remove(0, 11); JsonFromXML = JsonFromXML.Substring(0, JsonFromXML.Length - 1); JsonData = JsonFromXML.Replace("\"@", "\""); return new HttpResponseMessage() { Content = new StringContent(JsonData) }; }
我想通过参数"par"查询数据而不是固定数据"Pursat"。
你知道如何解决这个问题吗?
您似乎在传递带有双引号的值(HTML 编码中的 %22 = ")。所以实际上,您查询中的 where 看起来像这样:
where (string) el.Attribute("province") == ""Pursat""
而如果你这样称呼它:
http://localhost:55607/api/Test?par=Pursat
您的 where 子句如下所示:
where (string) el.Attribute("province") == "Pursat"