如何使用条件解析XML?

时间:2016-06-24 11:24:22

标签: c# xml

articleABS()方法输出是以下XML。

Conflict <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet href="#####" type="text/xsl"?> <?xml-stylesheet href="####" type="text/css"?> <status><code>409</code><message>content.article.required.title null</message></status>

我创建了createURL()方法,它应该读取articleABS()的输出并从<code>节点中提取值。我想使用代码中的值来添加一些条件。

  public string createURL()
    {
        string uri = "";

        var document = XDocument.Parse(articleABS());

        var code = document.Descendants("status").Single().Attribute("code").Value;

        if (code == "209")

        {
            articleCDO();
        }

        else 

        {

        var href = document.Descendants("link").Single().Attribute("title").Value;
        href = href.Replace("Article", "");
        string id = Regex.Match(href, @"\d+").Value;
        var result = (@"https://#####/article/" + id + "/sections");
        return uri = result.ToString();

        }

        return null;

    }

但是,当我运行createURL()函数时,我会继续获取以下内容 错误信息。

错误讯息:Data at the root level is invalid. Line 1, position 1.

代码行:var document = XDocument.Parse(articleABS());

请告知我可能出错的地方。谢谢

2 个答案:

答案 0 :(得分:3)

XML以&#34; Conflict&#34;开头。我不知道这是否是复制/粘贴错误,但肯定会导致解析失败。

答案 1 :(得分:1)

看起来“冲突”这个词出现在XML数据的开头。在尝试将字符串解析为XML之前,您需要删除它。

你可以这样做:

string currentXml = articleABS();
string fixedXml = currentXml.Substring(currentXml.IndexOf("<"));

var document = XDocument.Parse(fixedXml);