XmlTextWriter 的命名空间功能
更新:November 2007
命名空间是用于限定 XML 文档中的元素和属性名称的方法。 命名空间前缀将元素和属性与命名空间关联,命名空间又与统一资源标识符 (URI) 引用关联。 命名空间在 XML 文档中实现元素和属性名称的唯一性。
下面的列表显示 XmlTextWriter 具有允许应用程序以不同的方式声明命名空间的方法。 包括以下功能:
手动声明命名空间。
用新的命名空间重写当前命名空间声明。
声明多个命名空间。
除声明命名空间外,还可以在元素和属性中追加命名空间前缀。 若要为属性编写命名空间前缀,使用下列方法:
WriteAttributes
WriteAttributeString
WriteStartAttribute
有关为属性编写前缀的更多信息,请参见 XmlTextWriter 中的属性命名空间前缀。
若要为元素编写命名空间前缀,使用下列方法:
WriteElement
WriteElementString
WriteStartElement
有关为元素编写前缀的更多信息,请参见 XmlTextWriter 中的元素命名空间前缀。
编写器维护一个命名空间堆栈,用于跟踪已由元素定义的命名空间。 下面的代码示例显示在写出元素时如何使用该命名空间堆栈。
Dim w As New XmlTextWriter(Console.Out)
w.WriteStartElement("root", "urn:1")
w.WriteStartElement("item", "urn:2")
w.WriteEndElement()
w.WriteEndElement()
w.Close()
XmlTextWriter w = new XmlTextWriter(Console.Out);
w.WriteStartElement("root","urn:1");
w.WriteStartElement("item","urn:2");
w.WriteEndElement();
w.WriteEndElement();
w.Close();
输出
<root xmlns="urn:1">
<item xmlns="urn:2"/>
</root>
下面的示例显示在嵌套元素上使用重复的命名空间声明时所发生的事件。 注意,输出中的空 item 元素不重复命名空间声明。
Dim w As New XmlTextWriter(Console.Out)
w.WriteStartElement("root", "urn:1")
w.WriteStartElement("item", "urn:1")
w.WriteEndElement()
w.WriteEndElement()
w.Close()
XmlTextWriter w = new XmlTextWriter(Console.Out);
w.WriteStartElement("root","urn:1");
w.WriteStartElement("item","urn:1");
w.WriteEndElement();
w.WriteEndElement();
w.Close();
输出
<root xmlns="urn:1"><item/></root>
使用 XmlTextWriter 手动声明命名空间
可以手动编写命名空间声明,以优化命名空间声明的数目。 下面的代码示例显示如何优化命名空间声明的数目。
w.WriteStartElement("root")
w.WriteAttributeString("xmlns", "x", Nothing, "urn:1")
w.WriteStartElement("item", "urn:1")
w.WriteEndElement()
w.WriteStartElement("item", "urn:1")
w.WriteEndElement()
w.WriteEndElement()
w.WriteStartElement("root");
w.WriteAttributeString("xmlns", "x", null, "urn:1");
w.WriteStartElement("item","urn:1");
w.WriteEndElement();
w.WriteStartElement("item","urn:1");
w.WriteEndElement();
w.WriteEndElement();
输出
<root xmlns:x="urn:1">
<x:item/>
<x:item/>
</x:root>
上述代码示例将命名空间声明提升为 root 元素,以避免在两个子元素上有重复项。 item 元素还从命名空间声明中选取前缀。
使用 XmlTextWriter 重写命名空间声明
下面的代码示例显示如何手动重写与给定前缀关联的命名空间。 请注意,order 值重写原始命名空间 URI 123。 这样可以在新元素范围内重新定义命名空间。
w.WriteStartElement("x", "node", "123")
w.WriteAttributeString("xmlns", "x", Nothing, "order")
w.WriteStartElement("x","node","123");
w.WriteAttributeString("xmlns","x",null,"order");
输出
<x:node xmlns:x="order"/>
使用 XmlTextWriter 声明多个命名空间
当有多个命名空间声明将不同的前缀映射到相同的统一资源名称 (URN) 时,XmlWriter 类通过返回到命名空间声明堆栈来选取最近的一个命名空间。 下面的代码示例显示 WriteAttributeString 如何指定无前缀,从而使 XmlWriter 先找到 y 前缀。
Dim w As New XmlTextWriter(Console.Out)
w.WriteStartElement("x", "root", "urn:1")
w.WriteStartElement("y", "item", "urn:1")
w.WriteAttributeString("abc", "urn:1", "xyz")
w.WriteEndElement()
w.WriteEndElement()
w.Close()
XmlTextWriter w = new XmlTextWriter(Console.Out);
w.WriteStartElement("x","root","urn:1");
w.WriteStartElement("y","item","urn:1");
w.WriteAttributeString("abc","urn:1","xyz");
w.WriteEndElement();
w.WriteEndElement();
w.Close();
输出
<x:root xmlns:x="urn:1">
<y:item y:abc="xyz" xmlns:y="urn:1"/>
</x:root>