【问题标题】:XDocument not finding specific elementXDocument 未找到特定元素
【发布时间】:2018-06-18 14:04:14
【问题描述】:

我有一个按名称获取元素的自定义函数。

public static XElement GetElement(this XElement element, string elementName)
{
    if (!element.HasElements)
        throw new HasNoElementsException("");

    return element.Element(element.GetDefaultNamespace() + elementName) ?? 
        throw new ElementNotFoundException("");
}

该功能正常工作,但我对此处示例的一个特定 xml 文件有疑问:

<?xml version="1.0" encoding="ISO-8859-1"?>
<elementA xmlns="http://www.link1.com.br">
    <elementB>
        ...other elements
    </elementB>
    <elementC xmlns="http://www.link2.com.br" schemaLocation="http://www.link1.com.br file.xsd">
        <elementD>
            ...other elements
        </elementD>
    </elementC>
</elementA>

当我尝试在 xml 中获取 elementB 时,它可以工作,但是当我尝试获取 elementC 时,ElementNotFoundException 被抛出。

抱歉我的英语不好,这里是巴西人! :)

【问题讨论】:

  • 因为elementC 有一个命名空间。请参阅stackoverflow.com/a/50783747/8951109 以供参考...
  • 是的,但是我需要指定命名空间,也就是说我需要知道命名空间的值。有什么方法可以使用 XDocument.Element 函数使其动态化?

标签: c# linq-to-xml


【解决方案1】:
public static XElement GetElement(this XElement element, string elementName)
{
    if (!element.HasElements)
        throw new HasNoElementsException("");

    return element.Elements().FirstOrDefault(e => e.Name.LocalName.Equals(elementName)) ??
        throw new ElementNotFoundException("");
}

这将是一种无需默认命名空间即可获取具有指定名称的第一个元素的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-01
    • 2012-01-17
    • 2020-03-29
    • 1970-01-01
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    • 2016-07-18
    相关资源
    最近更新 更多