なぜ私はそれを書く必要があるのですか?また、DOM の一部のメソッドの最後に NS があるのはなぜですか?そのようなメソッドの目的は何ですか?
1 に答える
名前空間は<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>