XML 元素和命名空间 [英] XML Element and Namespace
问题描述
我有以下方法来解析 XMLElements:
I have the following method to parse XMLElements:
DisplayMessages(XElement root)
{
var items = root.Descendants("Item");
foreach (var item in items)
{
var name = item.Element("Name");
....
}
}
在调试模式下,我可以看到像这样的 XML 根:
In debug mode, I can see the root as XML like this:
<ItemInfoList>
<ItemInfo>
<Item>
<a:Name>item 1</a:Name>
...
<Item>
...
并且 var 名称为空(我希望得到项目 1").我尝试使用a:Name"但它导致异常(字符:不能在名称中使用").我不确定是否必须在根 XElelement 中设置命名空间.root下的所有xml节点都应该在同一个namespace中.
and var name is null (I expect to get "item 1"). I tried to use "a:Name" but it caused exception("character : cannot be used in name"). I am not sure if I have to set namespace in root XElelement or not. All the xml node under root should be in the same namespace.
我是 XElement 的新手.在我的代码中,item.Element("Name") 会得到它的子节点 "Name" 的值,对吗?
I am new to XElement. In my codes, item.Element("Name") will get its children node "Name"'s value value, is that right?
推荐答案
您需要使用包含命名空间的元素名称.试试这个:
You need to use element names that include namespace. Try this:
static void DisplayMessages(XElement root)
{
var items = root.Descendants(root.GetDefaultNamespace() + "Item");
foreach (var item in items)
{
var name = item.Element(item.GetNamespaceOfPrefix("a") + "Name");
Console.WriteLine(name.Value);
}
}
请注意,为了使代码更短,XNamespace 类重载了 operator +:XNamespace.Addition 运算符.
Note that operator + is overloaded for XNamespace class in order to make code shorter: XNamespace.Addition Operator.
这篇关于XML 元素和命名空间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!