C# 中的默认命名空间的范围 (LINQ to XML)
2013-01-11 16:43
716 查看
XML 树中表示的默认命名空间不在查询范围内。如果您的 XML 在默认命名空间内,仍须声明一个XNamespace 变量,并将该变量与本地名称组合在一起,生成一个限定名,在查询中使用。
查询 XML 树时遇到的一个最常见问题是,如果 XML 树具有默认命名空间,开发人员在编写查询时,有时会将 XML 视为不在命名空间内。
本主题的第一个示例集演示一种加载但是按不正确方式查询默认命名空间中的 XML 的典型方式。
第二个示例集演示必需的更正,以便可以查询命名空间中的 XML。
有关更多信息,请参见 使用
XML 命名空间。
示例
此示例演示如何在命名空间中创建 XML 和一个返回空结果集的查询。
C#
Visual Basic
此示例产生下面的结果:
示例
本示例演示如何在命名空间中创建 XML 和一个正确编码的查询。
与上述不正确编码的示例相比,使用 C# 时的正确方法是声明和初始化一个 XNamespace 对象,并在指定XName 对象时使用它。在这种情况下,Elements 方法的参数是一个 XName 对象。
而在使用 Visual Basic 时,正确的方法是声明和初始化一个全局默认命名空间。这样会将所有 XML 属性放入该默认命名空间。无需对该示例做任何其他修改,即可使它正常运行。
C#
Visual Basic
此示例产生下面的结果:
查询 XML 树时遇到的一个最常见问题是,如果 XML 树具有默认命名空间,开发人员在编写查询时,有时会将 XML 视为不在命名空间内。
本主题的第一个示例集演示一种加载但是按不正确方式查询默认命名空间中的 XML 的典型方式。
第二个示例集演示必需的更正,以便可以查询命名空间中的 XML。
有关更多信息,请参见 使用
XML 命名空间。
示例
此示例演示如何在命名空间中创建 XML 和一个返回空结果集的查询。
代码
C#XElement root = XElement.Parse( @"<Root xmlns='http://www.adventure-works.com'> <Child>1</Child> <Child>2</Child> <Child>3</Child> <AnotherChild>4</AnotherChild> <AnotherChild>5</AnotherChild> <AnotherChild>6</AnotherChild> </Root>"); IEnumerable<XElement> c1 = from el in root.Elements("Child") select el; Console.WriteLine("Result set follows:"); foreach (XElement el in c1) Console.WriteLine((int)el); Console.WriteLine("End of result set");
Visual Basic
Module Module1 Sub Main() Dim root As XElement = _ <Root xmlns='http://www.adventure-works.com'> <Child>1</Child> <Child>2</Child> <Child>3</Child> <AnotherChild>4</AnotherChild> <AnotherChild>5</AnotherChild> <AnotherChild>6</AnotherChild> </Root> Dim c1 As IEnumerable(Of XElement) = _ From el In root.<Child> _ Select el Console.WriteLine("Result set follows:") For Each el As XElement In c1 Console.WriteLine(CInt(el)) Next Console.WriteLine("End of result set") End Sub End Module
注释
此示例产生下面的结果:Result set follows: End of result set
示例
本示例演示如何在命名空间中创建 XML 和一个正确编码的查询。
与上述不正确编码的示例相比,使用 C# 时的正确方法是声明和初始化一个 XNamespace 对象,并在指定XName 对象时使用它。在这种情况下,Elements 方法的参数是一个 XName 对象。
而在使用 Visual Basic 时,正确的方法是声明和初始化一个全局默认命名空间。这样会将所有 XML 属性放入该默认命名空间。无需对该示例做任何其他修改,即可使它正常运行。
代码
C#XElement root = XElement.Parse( @"<Root xmlns='http://www.adventure-works.com'> <Child>1</Child> <Child>2</Child> <Child>3</Child> <AnotherChild>4</AnotherChild> <AnotherChild>5</AnotherChild> <AnotherChild>6</AnotherChild> </Root>"); XNamespace aw = "http://www.adventure-works.com"; IEnumerable<XElement> c1 = from el in root.Elements(aw + "Child") select el; Console.WriteLine("Result set follows:"); foreach (XElement el in c1) Console.WriteLine((int)el); Console.WriteLine("End of result set");
Visual Basic
Imports <xmlns="http://www.adventure-works.com"> Module Module1 Sub Main() Dim root As XElement = _ <Root xmlns='http://www.adventure-works.com'> <Child>1</Child> <Child>2</Child> <Child>3</Child> <AnotherChild>4</AnotherChild> <AnotherChild>5</AnotherChild> <AnotherChild>6</AnotherChild> </Root> Dim c1 As IEnumerable(Of XElement) = _ From el In root.<Child> _ Select el Console.WriteLine("Result set follows:") For Each el As XElement In c1 Console.WriteLine(el.Value) Next Console.WriteLine("End of result set") End Sub End Module
注释
此示例产生下面的结果:Result set follows: 1 2 3 End of result set
相关文章推荐
- Linq to xml 操作带命名空间的xml
- Linq to Xml读取复杂xml(带命名空间)
- Linq to Xml读取复杂xml(带命名空间)
- 【转】C# XML序列化去掉XML默认的命名空间及声明头
- Linq to Xml (1) 创建和查询包含命名空间的XML文档
- Linq to Xml读取复杂xml(带命名空间)
- C#解析XML详解(XPath以及带命名空间NameSpace)
- c#读取带命名空间的xml
- C# XML序列化去掉XML默认的命名空间及声明头
- C#读取写入带有命名空间的XML文件
- 在XML序列化时去除默认命名空间xmlns:xsd和xmlns:xsi
- C# Linq To XML 读取XML,修改属性
- C#学习之Linq to Xml
- C# Linq to xml 基本操作
- C# LINQ to XML
- .NET(C#):使用XPath查询带有命名空间(有xmlns)的XML
- C# LINQ基本用法(3) ---LINQ To Xml
- 带有命名空间的xml添加属性和元素(c#.NET)
- XML 默认命名空间
- C#使用Linq To XML读取XML,Linq生成XML,Linq创建带属性或带节点XML