我在使用具有多个名称空间的根节点解析XML文件时遇到了一些麻烦。我想得到一个包含'UserControlLibrary'类型字符串的节点'对象'列表:
XML文件:
<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.net
http://www.springframework.net/xsd/spring-objects.xsd">
<!-- master pages -->
<object type="RLN.Site, RLN">
<property name="ContainerBLL" ref="ContainerBLL"></property>
<property name="UserBLL" ref="UserBLL"></property>
<property name="TestsBLL" ref="TestsBLL"></property>
<property name="GuidBLL" ref="GuidBLL"></property>
</object>
<object type="RLN.UserControlLibrary.topleveladmin, RLN.UserControlLibrary">
<property name="ContainerBLL" ref="ContainerBLL"></property>
<property name="UserBLL" ref="UserBLL"></property>
<property name="GuidBLL" ref="GuidBLL"></property>
</object>
<object type="RLN.UserControlLibrary.topleveladminfloat, RLN.UserControlLibrary">
<property name="ContainerBLL" ref="ContainerBLL"></property>
<property name="UserBLL" ref="UserBLL"></property>
</object>
</objects>
我试过了:
XDocument webXMLResource = XDocument.Load(@"../../../../Web.xml");
IEnumerable<XElement> values = webXMLResource.Descendants("object");
没有返回任何结果。
答案 0 :(得分:10)
命名空间的另一个技巧 - 您可以使用XElement.GetDefaultNamespace()来获取根元素的默认命名空间。然后使用此默认命名空间进行查询:
var xdoc = XDocument.Load(path_to_xml);
var ns = xdoc.Root.GetDefaultNamespace();
var objects = xdoc.Descendants(ns + "object");
答案 1 :(得分:3)
当您使用Decendants
参数致电XName
时,XName
的{{1}}(恰好是空的)实际上已合并到NameSpace
中Name
的补充。因此,您只能通过LocalName
LocalName
答案 2 :(得分:2)
尝试使用命名空间:
var ns = new XNamespace("http://www.springframework.net");
IEnumerable<XElement> values = webXMLResource.Descendants(ns + "object");
答案 3 :(得分:0)
如果您使用的是decedent,则必须添加如下所示的名称空间
XDocument webXMLResource = XDocument.Load(@"../../../../Web.xml");
XNamespace _XNamesapce = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance");
IEnumerable<XElement> values = from ele in webXMLResource .Descendants(_XNamesapce + "object")
select ele;
希望它对您有用