【问题标题】:(String)XElement returning empty string even though XElement is not empty (C#)(String)XElement 返回空字符串,即使 XElement 不为空 (C#)
【发布时间】:2015-03-05 00:33:34
【问题描述】:

我正在尝试从 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") 并得到错误。但是,我的 all 元素都返回空; (String)element 返回为 "" 即使我的元素不为空。

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

<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.Element("img");
  • 老实说,我很惊讶您在尝试“(字符串)元素”时没有遇到异常。
  • 尝试使用 XElement 类的函数。
  • XElement 有一个显式转换为字符串,它返回所有子元素的所有文本,而不是子元素本身。 msdn.microsoft.com/en-us/library/bb155263(v=vs.110).aspx
  • 哦,感谢更新 juharr。我没有意识到这一点。

标签: c# xml string null


【解决方案1】:

您不需要强制转换为string,您已经在检查Element 是否返回null,这足以确定子元素是否存在。

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 的原因是空的,因为它将返回元素和元素后代的连接文本,但您的元素及其后代不包含任何文本。有关 XElement here 的显式 string 转换,请参阅文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 2015-09-09
    相关资源
    最近更新 更多