.net 2.0 c # извлечение значения из xml - PullRequest
0 голосов
/ 23 декабря 2009

Я понимаю, что это репост, но мне нужно было, так как я не могу использовать LINQ (запрошено в моем предыдущем посте).

Мне нужно прочитать горе из документа XML ниже. Мне нужно прочитать и сохранить данные в строковую переменную, чтобы я мог запросить службу погоды Yahoo.

XML возвращается по запросу:

<query yahoo:count="1"
       yahoo:created="2009-12-22T08:30:31Z"
       yahoo:lang="en-US"
       yahoo:updated="2009-12-22T08:30:31Z"
       yahoo:uri="http://query.yahooapis.com/v1/yql?q=select+woeid+from+geo.places+where+text%3D%22farnborough%2C+greater+london%2Cuk%22">

<diagnostics>
<publiclyCallable>true</publiclyCallable>

<url execution-time="32">
http://where.yahooapis.com/v1/places.q(farnborough%2C%20greater%20london%2Cuk);start=0;count=10
</url>
<user-time>33</user-time>
<service-time>32</service-time>
<build-version>4265</build-version>
</diagnostics>

<results>

<place>
<woeid>19941</woeid>
</place>
</results>
</query>

Может кто-нибудь подсказать, как я могу сделать это через XPath или другим способом, совместимым с библиотеками в .net 2.0?

Спасибо за ответы. Поэтому я использую метод ниже, но я получаю исключение при загрузке документа XML:

private string getWOEID(string UserLocation, string UserCountry)
{
    string woeID = "";

    if (UserLocation == "farnborough") { UserLocation = "farnborough" + "%2C" + "hampshire"; }

    String reqUrl = "http://query.yahooapis.com/v1/public/yql?q=select%20woeid%20from%20geo.places%20where%20text%3D%22" + UserLocation + "%2C" + UserCountry + "%22&format=xml";

    XmlDocument doc = new XmlDocument();
    doc.LoadXml(reqUrl);
   string woeid = doc.SelectSingleNode("query/results/place/woeid/text()").Value;
    return woeID;


}

Ответы [ 2 ]

3 голосов
/ 23 декабря 2009

Обычным способом:

XmlDocument doc = new XmlDocument();
doc.Load(url);
string woeid = doc.SelectSingleNode("query/place/woeid/text()").Value;

Менее традиционный способ сделать это:

int start = xmlString.IndexOf("<woeid>") + 7;
int end = xmlString.IndexOf("</woeid>", start);
string woeid = xmlString.Substring(start, end - start);

Кто-нибудь хочет запустить тест?

2 голосов
/ 23 декабря 2009

Я попробую еще раз, используя пост ChaosPandion в качестве отправной точки:

    XmlDocument doc = new XmlDocument();
    using (XmlTextReader tr = new XmlTextReader(new StringReader(xmlString)))
    {
        tr.Namespaces = false;
        doc.Load(tr);
    }
    string woeId = doc.GetElementsByTagName("woeid")[0].InnerText;

Обратите внимание, что я намеренно игнорирую здесь пространства имен, поскольку они вам не нужны для того, что вы пытаетесь сделать.

...