少なくとも .Net Frameworkでは、XPath クエリを実行するときに名前空間 (またはかなり不格好で冗長なXPath 述語/関数/その他)を処理するために を使用する必要がある理由について、私はちょっとドライに思いつきました。. 名前空間が必要な理由、または少なくとも有益である理由は理解できますが、なぜそれほど複雑なのですか?XmlNamespaceManager
[local-name()=...
単純な XML ドキュメント (名前空間なし) をクエリするには...
<?xml version="1.0" encoding="ISO-8859-1"?>
<rootNode>
<nodeName>Some Text Here</nodeName>
</rootNode>
...次のようなものを使用できますdoc.SelectSingleNode("//nodeName")
(一致し<nodeName>Some Text Here</nodeName>
ます)
ミステリー #1 :私の最初の煩わしさ - 私の理解が正しければ - 親/ルートタグ (子ノードタグの一部として使用されているかどうかにかかわらず) に名前空間参照を追加するだけです:
<?xml version="1.0" encoding="ISO-8859-1"?>
<rootNode xmlns="http://example.com/xmlns/foo">
<nodeName>Some Text Here</nodeName>
</rootNode>
...同じ結果を得るには、さらに数行のコードが必要です。
Dim nsmgr As New XmlNamespaceManager(doc.NameTable)
nsmgr.AddNamespace("ab", "http://example.com/xmlns/foo")
Dim desiredNode As XmlNode = doc.SelectSingleNode("//ab:nodeName", nsmgr)
...基本的に、存在しないプレフィックス (" ab
") を夢見て、プレフィックスを使用していないノードを見つけます。これはどのように理にかなっていますか?(概念的に)何が間違っていdoc.SelectSingleNode("//nodeName")
ますか?
ミステリー #2 : たとえば、プレフィックスを使用する XML ドキュメントがあるとします。
<?xml version="1.0" encoding="ISO-8859-1"?>
<rootNode xmlns:cde="http://example.com/xmlns/foo" xmlns:feg="http://example.com/xmlns/bar">
<cde:nodeName>Some Text Here</cde:nodeName>
<feg:nodeName>Some Other Value</feg:nodeName>
<feg:otherName>Yet Another Value</feg:otherName>
</rootNode>
...私が正しく理解している場合XmlNamespaceManager
、単一のノードのクエリを作成するには、両方の名前空間をに追加する必要があります...
Dim nsmgr As New XmlNamespaceManager(doc.NameTable)
nsmgr.AddNamespace("cde", "http://example.com/xmlns/foo")
nsmgr.AddNamespace("feg", "http://example.com/xmlns/bar")
Dim desiredNode As XmlNode = doc.SelectSingleNode("//feg:nodeName", nsmgr)
... この場合、なぜ (概念的に) 名前空間マネージャーが必要なのですか?
******以下のコメントに編集済み****
編集が追加されました: 私の修正され洗練された質問は、ほとんどの場合であると思われる XmlNamespaceManager の明らかな冗長性と、URI へのプレフィックスのマッピングを指定する名前空間マネージャーの使用に基づいています。
名前空間プレフィックス ("cde") から名前空間 URI (" http://example.com/xmlns/foo ") への直接マッピングがソース ドキュメントで明示的に記述されている場合:
...<rootNode xmlns:cde="http://example.com/xmlns/foo"...
プログラマーがクエリを作成する前にそのマッピングを再作成する必要があるという概念は何ですか?