Tom*_*ata 10 c# xml linq linq-to-xml
我是使用XML的新手,在尝试从spring.net配置文件中获取特定标记时遇到了一个奇怪的问题.在尝试使用测试xml文件缩小问题范围后,我发现应用以下代码:
List<XElement> nodes = xmlFile.Descendants("B").ToList();
Run Code Online (Sandbox Code Playgroud)
提供包含以下文件的非空列表:
<?xml version="1.0" encoding="utf-8" ?>
<A fakeAttribute="aaa">
<B id="DbProvider"/>
</A>
Run Code Online (Sandbox Code Playgroud)
但是提供了一个带有以下文件的空字符串:
<?xml version="1.0" encoding="utf-8" ?>
<A xmlns="aaa">
<B id="DbProvider"/>
</A>
Run Code Online (Sandbox Code Playgroud)
作为属性的文件之间的唯一区别.
我无法想象对此的解释.谢谢你的帮助.
xan*_*tos 10
为了完整起见:
var lst = doc.Descendants("{aaa}B").ToList();
Run Code Online (Sandbox Code Playgroud)
(另一个说的是正确的,但我想给另一种选择:-))
为了超完整性,如果要搜索忽略命名空间:
var lst = doc.Descendants().Where(p => p.Name.LocalName == "B").ToList();
Run Code Online (Sandbox Code Playgroud)
您需要在该命名空间中搜索标记:
XNamespace ns = "aaa";
xmlFile.Descendants(ns + "B").ToList()
Run Code Online (Sandbox Code Playgroud)
您应该在查询元素时指定命名空间.
您可以使用GetDefaultNamespace方法来避免对其进行硬编码.如果你不知道它是什么,它也很有用.
例:
var ns = xmlFile.GetDefaultNamespace();
var nodes = xmlFile.Descendants(ns + "B").ToList();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1230 次 |
| 最近记录: |