2

なぜ私はそれを書く必要があるのですか?また、DOM の一部のメソッドの最後に NS があるのはなぜですか?そのようなメソッドの目的は何ですか?

4

1 に答える 1

3

名前空間は<tagname>競合を解決するためのものです

次の XML ツリーを検討してください。

<aaa xmlns="http://my.org">
    <bbb xmlns="http://your.org">hello</bbb>
    <bbb>hello</bbb>
</aaa>

最初の<bbb>タグは名前空間に属しますhttp://my.org

もう1つは名前空間に属しますhttp://your.org


もう一つの例

<company xmlns="http://someschema.org/company"
xmlns:chairman="http://someschema.org/chairman">
    <nameValue>Microsoft</nameValue>
    <chairman:nameValue>Bill Gates</chairman:nameValue>
    <countryValue>USA</countryValue>
</company>

そこには 2 つの<nameValue>タグがあり、1 つは会社の名前、もう 1 つは会長の名前を参照していますが、この競合は接頭辞を使用して解決されています。

それを書く別の方法は次のとおりです。

<com:company
xmlns:com="http://someschema.org/company"
xmlns:cha="http://someschema.org/chairman">
    <com:nameValue>       Microsoft    </com:nameValue>
    <cha:nameValue>       Bill Gates   </cha:nameValue>
    <com:countryValue>    USA          </com:countryValue>
</com:company>

したがって、プレフィックスを指定しない場合は、デフォルトの名前空間を定義しています

xmlns="http://default-namespace.org"
xmlns:nondefault="http://non-default-namespace.org"

たとえば、子孫要素が<sometest>属することを意味しますhttp://default-namespace.org

<nondefault:anotherone>代わりに属しているhttp://non-default-namespace.org


URL を名前空間文字列として使用する理由 競合のリスクのない認定ソースを識別するため (ドメイン名は 1 人のユーザーのみが所有できます)、xmlns属性に入力した URL は何らかの形でダウンロードまたは解析されず、タグの名前空間を一意に識別する文字列にすぎません。 . 同様に、たとえば次のような文字列を使用できますxmlns="com.yourcompany.yournamespace"


したがって、document.getElementByTagNameNS()などの DOM メソッドは、特定の名前空間の要素を選択するためのものです。

<?php

// asking php some help here
// page must be served as application/xml otherwise
// getElementsByTagNameNS will not work !!!

header("Content-Type: application/xml; charset=UTF-8");

echo '<?xml version="1.0" encoding="UTF-8" ?>';

?>
<html xmlns="http://www.w3.org/1999/xhtml">
    <com:company
        xmlns:com="http://someschema.org/company"
        xmlns:cha="http://someschema.org/chairman">
        <p>this is html!</p>
        <com:nameValue>       Microsoft    </com:nameValue>
        <cha:nameValue>       Bill Gates   </cha:nameValue>
        <com:countryValue>    USA          </com:countryValue>
        <p>this is html!</p>
    </com:company>

    <script>
        //<![CDATA[

        window.onload = function(){

        alert("html paragraphs: " + document.getElementsByTagNameNS(
        "http://www.w3.org/1999/xhtml", "p").length);

        // selects both <com:name> and <cha:name>
        alert("any nameValue: " + document.getElementsByTagName(
        "nameValue").length);

        // selects only <com:name>
        alert("company nameValue: " + document.getElementsByTagNameNS(
        "http://someschema.org/company", "nameValue").length);

        // selects only <cha:name>
        alert("chairman nameValue: " + document.getElementsByTagNameNS(
        "http://someschema.org/chairman", "nameValue").length);

        };

        //]]>
    </script>
</html>
于 2013-05-16T06:25:35.430 に答える