使用参数过滤属性(XPath-LINQ to XML)

Filter on an Attribute (XPath-LINQ to XML) by using parameter

  1. 此代码无效

    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"),我可以从我的代码中获取数据。

  1. 这段代码运行良好

    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"