Как разобрать XML? - PullRequest
       17

Как разобрать XML?

1 голос
/ 10 августа 2010

Это ответ, который я получу:

<?xml version="1.0" encoding="utf-8"?>
<rsp stat="ok">
        <image_hash>cxmHM</image_hash>
        <delete_hash>NNy6VNpiAA</delete_hash>
        <original_image>http://imgur.com/cxmHM.png</original_image>
        <large_thumbnail>http://imgur.com/cxmHMl.png</large_thumbnail>
        <small_thumbnail>http://imgur.com/cxmHMl.png</small_thumbnail>
        <imgur_page>http://imgur.com/cxmHM</imgur_page>
        <delete_page>http://imgur.com/delete/NNy6VNpiAA</delete_page>
</rsp>

Как мне извлечь значение каждого тега?

XDocument response = new XDocument(w.UploadValues("http://imgur.com/api/upload.xml", values));
string originalImage = 'do the extraction here';
string imgurPage = 'the same';
UploadedImage image = new UploadedImage();

Ответы [ 3 ]

6 голосов
/ 10 августа 2010

К счастью, все довольно просто:

string originalImage = (string) response.Root.Element("original_image");
string imgurPage = (string) response.Root.Element("imgur_page");
// etc

Это предполагает, что ваш XDocument вызов конструктора правильный ... не зная, что делает w.UploadValues, трудно сказать.

LINQ to XML делает запрос очень простым - дайте нам знать, если у вас есть что-нибудь более сложное.

Обратите внимание, что я использовал приведение к строке вместо получения свойства Value или чего-то подобного. Это означает, что если элемент <original_image> отсутствует, originalImage будет нулевым, а не генерируемым исключением. Вы можете предпочесть исключение, в зависимости от вашей конкретной ситуации.

0 голосов
/ 10 августа 2010

Одним из способов является использование инструмента .net xsd.exe для создания класса-оболочки для блока rsp xml, который вы указали в своем вопросе. Создав класс, вы можете просто использовать следующий блок кода, чтобы преобразовать xml в объект, который вы можете использовать непосредственно в своем коде. Конечно, всегда есть Xpath или linq, как сказал Джон в качестве опций, если вы предпочитаете загружать xml в объект и xmldocument, как вы делали выше.

    public static rsm GetRsmObject(string xmlString)
    {
        XmlSerializer serializer = new XmlSerializer(typeof(rsm));
        rsm result = null;

        using (XmlTextReader reader = new XmlTextReader(new StringReader(xmlString)))
        {
            result = (rsm)serializer.Deserialize(reader);
        }

        return result;
    }

Наслаждайтесь!

0 голосов
/ 10 августа 2010

.NET Framework имеет превосходный, простой в использовании встроенный XML Parser. См. здесь для справки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...