全部, 使用 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 但是会产生开销 - 小的是 - 但仍然是开销。)
答案 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