gpt4 book ai didi

namespaces - XElement.Descendants 不适用于命名空间

转载 作者:行者123 更新时间:2023-12-03 14:31:04 24 4
gpt4 key购买 nike

我有一个简单的 XML,

<S xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"><H></H></S>

我想找到所有“H”节点。
XElement x = XElement.Parse("<S xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"><H></H></S>");
IEnumerable<XElement> h = x.Descendants("H");
if (h != null)
{
}

但是这段代码不起作用。
当我从 S 标签中删除命名空间时,代码工作正常。

最佳答案

您的元素有一个命名空间,因为 xmlns有效地为该元素及其后代设置默认命名空间。试试这个:

XNamespace ns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation";
IEnumerable<XElement> h = x.Descendants(ns + "H");

请注意 Descendants永远不会返回 null,因此代码末尾的条件毫无意义。

如果您想查找所有 H无论命名空间如何,元素,您都可以使用:
var h = x.Descendants().Where(e => e.Name.LocalName == "H");

关于namespaces - XElement.Descendants 不适用于命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7227193/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com