使用LINQ引用XML本地Xelements

时间:2015-06-15 18:49:30

标签: c# xml linq

全部, 使用 foreach 时,很容易引用元素 LocalName

但是,如果我对某个特定元素名称感兴趣,可能是因为每个元素都有一个子元素数组,并且我想要一个父元素的 LocalName ,我该怎么做呢,无需借助 DefaultNamespace 前缀

{% for key, value in leasee.items %}
    <p> {{key}} </p>
    <ul>
    {% for k2, v2 in value.items %}
        <li> {{ k2 }} </li>
        {% for k3, v3 in v2.items %}
            <li>{{ k3 }}:{{ v3 }}</li>
            {% endfor %}
{% endfor %}
    </ul>

{% endfor %}

(是的,我可以在 foreach 中使用 if 但是会产生开销 - 小的是 - 但仍然是开销。)

1 个答案:

答案 0 :(得分:1)

您始终可以选择创建扩展方法,以按本地名称查找元素。无论你喜欢与否,你 to&#34;在foreach中使用if,&#34;这是你必须接受的卵头。

这个实现是针对LINQ的,但你总是可以手工写出来。

public static class Extensions
{
    public static IEnumerable<XElement> LocalElements<T>(this T source, string name)
            where T : XContainer
    {
        return source.Elements().Where(e => e.Name.LocalName == name);
    }

    public static IEnumerable<XElement> LocalDescendants<T>(this T source, string name)
            where T : XContainer
    {
        return source.Descendants().Where(e => e.Name.LocalName == name);
    }

    public static XElement LocalElement<T>(this T source, string name)
            where T : XContainer
    {
        return LocalElements(source, name).FirstOrDefault();
    }
}

然后你可以做这样的事情来获得价值:

var familyName = (string)family.LocalElement("familyName"); // always use casting