为什么我需要写它?为什么DOM的某些方法最终会有NS,这些方法的目的是什么?
答案 0 :(得分:3)
命名空间旨在解决<tagname>
冲突
考虑这个XML树:
<aaa xmlns="http://my.org">
<bbb xmlns="http://your.org">hello</bbb>
<bbb>hello</bbb>
</aaa>
第一个<bbb>
标记属于命名空间http://my.org
另一个属于命名空间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>
在那里你可以看到两个<nameValue>
标签,一个是公司名称,
一个是指主席的姓名 ...但是使用前缀来解决冲突!
另一种写作方式是:
<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作为命名空间字符串?因为他们识别出一个没有冲突风险的认证来源(域名只能由一个人拥有)
所以你放在xmlns
属性中的URL不会以某种方式下载或解析,它只是一个唯一标识你的标签命名空间的字符串。
您可以以相同的方式使用例如xmlns="com.yourcompany.yournamespace"
因此,DOM方法(如 document.getElementByTagNameNS())用于选择特定命名空间的元素
<?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>