XmlNamespaceManager から取得する情報
XmlNamespaceManager に格納済みの情報を設定したり取得するタスクを実行するときに使用できるメソッドとプロパティを、次の表に示します。
タスク | メソッドまたはプロパティ |
---|---|
既定の名前空間として定義されている namespaceURI を見つける。 | DefaultNamespace プロパティ |
宣言されていて、プリフィックスのスコープ内の namespaceURI を見つける。 | LookupNamespace メソッド |
宣言されていて、namespaceURI のスコープ内のプリフィックスを見つける。 | LookupPrefix メソッド |
追加の名前空間を XmlNamespaceManager に追加する。 | AddNamespace メソッド |
XmlNamespaceManager から名前空間を削除する。 | RemoveNamespace メソッド |
名前空間のスコープを指定する。 | PushScope メソッド、PopScope メソッド |
現在のスコープ内にプリフィックスが定義されているかどうかを確認する。 | HasNamespace メソッド |
XmlNamespaceManager オブジェクトに関連付けられている XmlNameTable を取得する。 | NameTable プロパティ |
属性を記述するときの LookupPrefix メソッドの使用方法を次の例に示します。この例では、WriteStartAttribute メソッドを使用して属性を開始し、LookupPrefix を使用して urn:samples
の namespaceURI のプリフィックスを検索し、ISBN 属性を記述するときに WriteStartAttribute の中でそのプリフィックスを使用しています。
"bk","urn:samples")
Dim prefix As String = nsMgr.LookupPrefix("urn:samples")
writer.WriteStartAttribute(prefix, "ISBN", "urn:samples")
[C#]
XmlNameTable nt = new XmlNameTable();
XmlNamespaceManager nsMgr = new XmlNamespaceManager(nt);
nsMgr.AddNamespace("bk","urn:samples");string prefix = writer nsMgr.LookupPrefix("urn:samples");
writer.WriteStartAttribute(prefix, "ISBN", "urn:samples");
LookupPrefix を使用して、要素に対して定義されているプリフィックスを見つける例を次に示します。
writer.WriteStartElement("root", "book")
writer.WriteStartElement("x", "node", "author")
s = writer.LookupPrefix("author")
CError.Compare(s, "x", "Error in nested element")
writer.WriteEndElement()
s = writer.LookupPrefix("book")
CError.Compare(s, Nothing, "Error in root element")
writer.WriteEndElement()
[C#]
writer.WriteStartElement("root", "book");
writer.WriteStartElement("x", "node", "author");
s = writer.LookupPrefix("author");
CError.Compare(s, "x", "Error in nested element");
writer.WriteEndElement();
s = writer.LookupPrefix("book");
CError.Compare(s, null, "Error in root element");
writer.WriteEndElement();
出力
<root xmlns="book">
<x:node xmlns:x="author" />
</root>
AddNamespace メソッドを使用して名前空間を追加し、PushScope メソッドと PopScope メソッドを使用して固有のスコープを指定する方法を次の例に示します。
Public Sub Main()
Dim nametable As NameTable = New NameTable()
Dim nsm As XmlNamespaceManager = New XmlNamespaceManager(nametable)
' Add a default namespace.
nsm.AddNamespace(String.Empty, "www.microsoft.com")
nsm.AddNamespace("msbooks", "www.microsoft.com/books")
'Push the namespace scope on the stack.
nsm.PushScope()
nsm.AddNamespace("msstore", "www.microsoft.com/store")
checkns(nsm)
nsm.PopScope()
checkns(nsm)
Dim response As String = Console.ReadLine
End Sub
Public Sub checkns(ByVal nsm As XmlNamespaceManager)
If nsm.HasNamespace(String.Empty) Then
Console.WriteLine("DefaultNamespace in scope")
Else
Console.WriteLine("DefaultNamespace not in scope")
End If
If nsm.HasNamespace("msstore") Then
Console.WriteLine("www.microsoft.com/store"" in scope")
Else
Console.WriteLine("www.microsoft.com/store not in scope")
End If
If nsm.HasNamespace("msbooks") Then
Console.WriteLine("www.microsoft.com/books in scope")
Else
Console.WriteLine("www.microsoft.com/books not in scope")
End If
End Sub
[C#]
XmlNameTable nt = new XmlNameTable();
XmlNamespaceManager nsmanager = new XmlNamespaceManager(nt);
//Add a default namespace.
nsmanager.AddNamespace (String.Empty, "www.microsoft.com");
nsmanager.AddNamespace ("msbooks", "www.microsoft.com/books");
nsmanager.PushScope();
nsmanager.AddNamespace ("msstore", "www.microsoft.com/store");
checkns(nsmanager);
nsmanager.PopScope();
checkns(nsmanager);
checkns(XmlNamespaceManager nsm)
{
if (nsm.HasNamespace(String.Empty))
Console.WriteLine("DefaultNamespace in scope");
else
Console.WriteLine("DefaultNamespace not in scope");
if (nsm.HasNamespace("msstore"))
Console.WriteLine(""www.microsoft.com/store"" in scope");
else
Console.WriteLine(""www.microsoft.com/store"" not in scope");
if (nsm.HasNamespace("msbooks"))
Console.WriteLine(""www.microsoft.com/books"" in scope");
else
Console.WriteLine(""www.microsoft.com/books"" not in scope");
}
出力
DefaultNamespace not in scope
www.microsoft.com/store" in scope
www.microsoft.com/books not in scope
DefaultNamespace in scope
www.microsoft.com/store not in scope
www.microsoft.com/books in scope
現在のスコープ内のすべてのプリフィックスを列挙し、追加の 3 つの名前空間とプリフィックスのペアを一覧する例を次に示します。これら 3 つの既定の名前空間とプリフィックスのペアは、名前空間マネージャの作成時に自動的に追加されます。
Dim nametable As NameTable = New NameTable()
Dim nsm As XmlNamespaceManager = New XmlNamespaceManager(nametable)
'Add a default namespace.
nsm.AddNamespace("xmlabc", "www.microsoft.com")
Dim prefix As String
For Each prefix In nsm
Console.WriteLine("Namespace:{0}, Prefix:{1}", nsm.LookupNamespace(nsm.NameTable.Get(prefix)), prefix)
Next
[C#]
NameTable nametable = new NameTable();
XmlNamespaceManager nsm = new XmlNamespaceManager(nametable);
//Add a default namespace.
nsm.AddNamespace("xmlabc", "www.microsoft.com");
foreach (String prefix in nsm)
{
Console.WriteLine("Namespace:{0}, Prefix:{1}",nsm.LookupNamespace(nsm.NameTable.Get(prefix)), prefix);
}
出力
Namespace:http://www.w3.org/XML/1998/namespace, Prefix:xml
Namespace:http://www.w3.org/2000/xmlns/, Prefix:xmlns
Namespace:, Prefix:
Namespace:www.microsoft.com, Prefix:xmlabc
参照
XML ドキュメントにおける名前空間 | 名前空間の宣言 | 既定の名前空間 | 名前空間の宣言のスコープ | XmlNamespaceManager を使用した名前空間の管理