(String)XElement返回空字符串,即使XElement不为空(C#)

时间:2015-03-04 16:01:50

标签: c# xml string null

我正在尝试从XML文件中的图像标记中获取图像。 Image元素被传递给这个函数:

private Image GetImage(XElement element)
{
    var image = new Image();

    var elemString = (String)element;
    if (String.IsNullOrEmpty(elemString))
    {
        return image;
    }

    XElement imageElement = element.Element("img");
    if (imageElement != null)
    {
        image.Url = (String)imageElement.Attribute("src");
    }
    return image;
}

我需要检查元素是否为空,这样我就不会尝试在空字符串上获取element.Element(“img”)并获得错误。但是,所有我的元素都返回空; (String)元素返回为“”,即使我的元素不为空。

例如,我的一个元素对象如下所示:

<Image>
  <img src="/assets/0/206/207/76aa1e77-4d7f-474e-9b94-3250a60b887a.jpg?n=673" alt="jackerman" />
</Image>

但是(String)element =“”;

链接发生同样的事情,其中​​有效链接上的(String)元素返回为空字符串。

private Link GetLink(XElement element)
{
    var link = new Link();

    if (String.IsNullOrEmpty((String)element))
    {
        return link;
    }

    XElement anchorElement = element.Element("a");
    if (anchorElement != null)
    {
        link.Url = (String)anchorElement.Attribute("href");
        link.Text = (String)anchorElement;
    }
    return link;
}

为什么(String)元素返回为空,如果这不起作用,我该如何检查'element'是否为空/空?

1 个答案:

答案 0 :(得分:2)

如果string返回null,则不需要强制转换为Element,这足以确定子元素是否存在。

private Image GetImage(XElement element)
{
    var image = new Image();

    XElement imageElement = element.Element("img");    
    if (imageElement != null)
    {
        image.Url = (String)imageElement.Attribute("src");
    }
    return image;
}

转换为string为空的原因是因为它将返回元素和元素后代的连接文本,但是您的元素及其后代不包含任何文本。请参阅string here的明确XElement广告的文档。