2016-09-28 6 views
0

私はデフォルトの名前空間を持つXML文書を持っています。私は/someroot/somechildのようなXPathのクエリに、私が名前空間を接頭辞、例えばxにマップして、その接頭語/x:someroot/x:somechildを使用しなければならないまで見つけることができませんでした。これは、何らかの属性を持つ要素をクエリしたい場合は、/x:someroot/x:somechild[@x:someattribute]が動作しませんが、/x:someroot/x:somechild[@someattribute]が機能するまで、これは問題ありません。 XML文書に名前空間接頭辞が定義されていないと、すべてのノード、要素、属性などがデフォルトの名前空間を継承すると考えられます。むしろ要素がデフォルトの名前空間を継承しているように見えますが、属性はそうではありません。確かに、私のXMLの理解は非常に限られています。何が欠けていますか?XPath要素はデフォルトの名前空間を継承しますが、属性は継承しないのはなぜですか?

私の文書はプレフィックスに、ドキュメントのデフォルトの名前空間をマッピングするために、上のXmlNamespaceManagerオブジェクトを照会するように私は、.NET XmlDocumentオブジェクトを使用しています、とSelectSingleNode(String, XmlNamespaceManager)方法は文書で照会し。

+0

の可能性のある重複した[非修飾属性名のためのXMLのデフォルトの名前空間?](http://stackoverflow.com/questions/3312390/xml-default-namespaces-for-unqualified-attribute-names) –

+1

あなたが求めます "なぜ? "、あなたはどんな答えを期待していますか?あなたは、XML名前空間ワーキンググループのメンバーが設計決定を下した時点で与えられた根拠を知りたいですか?あるいは、なぜこれが合理的な決定を下したのかについて、ある種の第三者の理論的根拠が必要ですか?それとも、スペックのルールへのポインタがほしいのですか?はい、これは動作するのですか? –

+0

ダブですが、私は私が好きな答えを得ました。私は何をお勧めしますか? –

答えて

4

これは、名前空間仕様が問題に言いたいことです:

デフォルトの名前空間宣言が 属性名に直接適用されません。接頭辞のない属性の解釈は、表示される要素である によって決定されます。

仕様書の作成者がこの決定を下した理由についての根拠はありません。

このステートメントは実際には非常に曖昧であることが指摘されています。例えば、接頭辞が付いていない属性は名前空間にはなく、包含する要素と同じ名前空間にあるとは言いませんが、両方の解釈を合理的に採用することができます。あなたは明確に述べているXPath 1.0の仕様を見ている決定的な声明について: のQNameが属性に接頭辞が付いていない場合は

属性名の名前空間URIはnullになります。

この場合も、理論的根拠はありません(編集者が自分自身を正当化する必要があると感じない限り、仕様には根拠がありません)。しかし、XPath 1.0の仕様の編集者は、ジェームズ・クラークがあって、ジェームズ・クラークは、一般的には、名前空間についての彼の思考についての手がかりを与え、ここでチュートリアルを

http://www.jclark.com/xml/xmlns.htm

書かれています。

xmlns属性は、接頭辞なしの属性 の名前には影響しないことに注意してください。この特定の決定についての根拠はありません。

関連する問題