命名空間是一種可對 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 宣告多個命名空間
當有多個命名空間宣告時,XmlWriter 類別將不同的前置詞對應至相同的 Uniform Resource Name (URN),藉由向上回到命名空間宣告的堆疊上,挑選一個最接近的宣告。 下列程式碼範例顯示 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>