使用XmlReader处理名称空间

时间:2012-10-09 10:25:14

标签: c# xml xml-namespaces xmlreader

我有一个复杂的XML文件,其结构如下:

<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="xxx:xxx:xxx:xxx:xxxxx:xxx:xsd:xxxx.xxx.xxx.xx">
    <Element1>
        <Element2>
            <Element2A>xxxxxx</Element2A>
            <Element2B>2012-08-29T00:00:00</Element2B>
        </Element2>
    </Element1>
</Document>

现在我正在使用XmlReader读取此XML文档并按如下方式处理信息

XmlReader xr = XmlReader.Create(filename);
while (xr.Read()) 
{
   xr.MoveToElement();
   XElement node = (XElement)XElement.ReadFrom(xr);
   Console.WriteLine(node.Name);
}
xr.Close();

我面临的问题是在输出中,命名空间以ElementName为前缀。例如输出

{xxx:xxx:xxx:xxx:xxxxx:xxx:xsd:xxxx.xxx.xxx.xx}Element1

我是否可以删除/处理此问题,因为我需要使用元素名称和子名称进行进一步过滤。

2 个答案:

答案 0 :(得分:2)

XElement.Name不是(正如您所料)String,而是具有XName属性的LocalName,因此:

Console.WriteLine(node.Name.LocalName);

答案 1 :(得分:0)

您可能想要删除命名空间。删除命名空间的一种方法是编写c#代码,其他方法是使用Remove Namespace中建议的XSLT转换 -Milind