C# Linq到XML不提供任何值
我只是不知道这个代码有什么问题。。。知道我做错了什么吗。select返回一个包含所有null属性的项,即foreach循环输入一次,WMServer服务器。[pick attribute]设置为nullC# Linq到XML不提供任何值,c#,xml,linq,C#,Xml,Linq,我只是不知道这个代码有什么问题。。。知道我做错了什么吗。select返回一个包含所有null属性的项,即foreach循环输入一次,WMServer服务器。[pick attribute]设置为null var xdoc = XDocument.Load(@"pathtoxmlfile.xml"); var wms = from e2 in xdoc.Elements("GISImportConfig").Elements("BaseMapLayers") select ne
var xdoc = XDocument.Load(@"pathtoxmlfile.xml");
var wms = from e2 in xdoc.Elements("GISImportConfig").Elements("BaseMapLayers")
select new
{
Url = (string)e2.Attribute("url"),
Enabled = (string)e2.Attribute("enabled"),
UserName = (string)e2.Attribute("username"),
Pasword = (string)e2.Attribute("password"),
Layers = e2.Elements("WMLayer")
};
foreach (var Config in wms)
{
WMServer server = new WMServer();
server.ServerURL = Config.Url;
server.Enabled = Convert.ToBoolean(Config.Enabled);
server.UserName = Config.UserName;
server.Password = Config.Pasword;
foreach (var layers in Config.Layers)
{
WMLayer layer = new WMLayer();
layer.Group = (string)layers.Attribute("group");
layer.Enabled = Convert.ToBoolean(layers.Attribute("enabled"));
layer.Name = (string)layers.Attribute("name");
}
}
xml:
您只得到一个结果,因为您只有一个
元素,这就是您在查询中要查找的元素。添加.Elements(“WMServer”)
方法调用,它应该可以工作:
from e2 in xdoc.Elements("GISImportConfig").Elements("BaseMapLayers").Elements("WMServer")
select new
{
Url = (string)e2.Attribute("url"),
Enabled = (string)e2.Attribute("enabled"),
UserName = (string)e2.Attribute("username"),
Pasword = (string)e2.Attribute("password"),
Layers = e2.Elements("WMLayer")
};
返回2个具有非空属性值的元素。看起来您正在尝试获取
WMServer
元素,并且当前正在选择BaseMapLayers
元素(其中只有一个存在)
通过执行以下操作,可以获取WMServer
元素:
from e2 in xdoc.Descendants("WMServer")
select new
{
Url = (string)e2.Attribute("url"),
Enabled = (string)e2.Attribute("enabled"),
UserName = (string)e2.Attribute("username"),
Pasword = (string)e2.Attribute("password"),
Layers = e2.Elements("WMLayer")
};
这将获取所有WMServer
子元素
我认为MarcinJuraszek有一个更好的答案(添加相关元素),因为如果您发现一个放错位置的
WMServer
元素,或者只希望这些元素位于xml中的特定位置,那么遇到问题的范围就更小。Select
无法更改原始源代码的元素计数,这意味着您必须查看源代码…我认为您在xml
中有一个额外的
(与问题无关)。谢谢,源xml文件中没有。我已经编辑了这个问题。@will我可以看到您的xml文件只有1个BaseMapLayers
元素,那么您怎么能期望它有1个以上的元素呢?我想了解有关WMS服务器元素(其中两个)的信息,感谢您解释您的答案与MarcinJuraszek的不同之处。这有帮助。
from e2 in xdoc.Descendants("WMServer")
select new
{
Url = (string)e2.Attribute("url"),
Enabled = (string)e2.Attribute("enabled"),
UserName = (string)e2.Attribute("username"),
Pasword = (string)e2.Attribute("password"),
Layers = e2.Elements("WMLayer")
};