整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          XML 命名空間

          XML 命名空間

          ML 命名空間提供避免元素命名沖突的方法。

          命名沖突

          在 XML 中,元素名稱是由開發者定義的,當兩個不同的文檔使用相同的元素名時,就會發生命名沖突。

          這個 XML 攜帶 HTML 表格的信息:

          <table>

          <tr>

          <td>Apples</td>

          <td>Bananas</td>

          </tr>

          </table>

          這個 XML 文檔攜帶有關桌子的信息(一件家具):

          <table>

          <name>African Coffee Table</name>

          <width>80</width>

          <length>120</length>

          </table>

          假如這兩個 XML 文檔被一起使用,由于兩個文檔都包含帶有不同內容和定義的 <table> 元素,就會發生命名沖突。

          XML 解析器無法確定如何處理這類沖突。

          使用前綴來避免命名沖突

          在 XML 中的命名沖突可以通過使用名稱前綴從而容易地避免。

          該 XML 攜帶某個 HTML 表格和某件家具的信息:

          <h:table>

          <h:tr>

          <h:td>Apples</h:td>

          <h:td>Bananas</h:td>

          </h:tr>

          </h:table>

          <f:table>

          <f:name>African Coffee Table</f:name>

          <f:width>80</f:width>

          <f:length>120</f:length>

          </f:table>

          在上面的實例中,不會有沖突,因為兩個 <table> 元素有不同的名稱。

          XML 命名空間 - xmlns 屬性

          當在 XML 中使用前綴時,一個所謂的用于前綴的命名空間必須被定義。

          命名空間是在元素的開始標簽的 xmlns 屬性中定義的。

          命名空間聲明的語法如下。xmlns:前綴="URI"。

          <root>

          <h:table xmlns:h="http://www.w3.org/TR/html4/">

          <h:tr>

          <h:td>Apples</h:td>

          <h:td>Bananas</h:td>

          </h:tr>

          </h:table>

          <f:table xmlns:f="http://www.w3cschool.cc/furniture">

          <f:name>African Coffee Table</f:name>

          <f:width>80</f:width>

          <f:length>120</f:length>

          </f:table>

          </root>

          在上面的實例中,<table> 標簽的 xmlns 屬性定義了 h: 和 f: 前綴的合格命名空間。

          當命名空間被定義在元素的開始標簽中時,所有帶有相同前綴的子元素都會與同一個命名空間相關聯。

          命名空間,可以在他們被使用的元素中或者在 XML 根元素中聲明:

          <root xmlns:h="http://www.w3.org/TR/html4/"

          xmlns:f="http://www.w3cschool.cc/furniture">

          <h:table>

          <h:tr>

          <h:td>Apples</h:td>

          <h:td>Bananas</h:td>

          </h:tr>

          </h:table>

          <f:table>

          <f:name>African Coffee Table</f:name>

          <f:width>80</f:width>

          <f:length>120</f:length>

          </f:table>

          </root>

          注釋:命名空間 URI 不會被解析器用于查找信息。

          其目的是賦予命名空間一個惟一的名稱。不過,很多公司常常會作為指針來使用命名空間指向實際存在的網頁,這個網頁包含關于命名空間的信息。

          請訪問 http://www.w3.org/TR/html4/。

          統一資源標識符(URI,全稱 Uniform Resource Identifier)

          統一資源標識符(URI)是一串可以標識因特網資源的字符。

          最常用的 URI 是用來標識因特網域名地址的統一資源定位器(URL)。另一個不那么常用的 URI 是統一資源命名(URN)。

          在我們的實例中,我們僅使用 URL。

          默認的命名空間

          為元素定義默認的命名空間可以讓我們省去在所有的子元素中使用前綴的工作。它的語法如下:

          xmlns="namespaceURI"

          這個 XML 攜帶 HTML 表格的信息:

          <table xmlns="http://www.w3.org/TR/html4/">

          <tr>

          <td>Apples</td>

          <td>Bananas</td>

          </tr>

          </table>

          這個XML攜帶有關一件家具的信息:

          <table xmlns="http://www.w3schools.com/furniture">

          <name>African Coffee Table</name>

          <width>80</width>

          <length>120</length>

          </table>

          實際使用中的命名空間

          XSLT 是一種用于把 XML 文檔轉換為其他格式的 XML 語言,比如 HTML。

          在下面的 XSLT 文檔中,您可以看到,大多數的標簽是 HTML 標簽。

          非 HTML 的標簽都有前綴 xsl,并由此命名空間標識:xmlns:xsl="http://www.w3.org/1999/XSL/Transform":

          <?xml version="1.0" encoding="ISO-8859-1"?>

          <xsl:stylesheet version="1.0"

          xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

          <xsl:template match="/">

          <html>

          <body>

          <h2>My CD Collection</h2>

          <table border="1">

          <tr>

          <th align="left">Title</th>

          <th align="left">Artist</th>

          </tr>

          <xsl:for-each select="catalog/cd">

          <tr>

          <td><xsl:value-of select="title"/></td>

          <td><xsl:value-of select="artist"/></td>

          </tr>

          </xsl:for-each>

          </table>

          </body>

          </html>

          </xsl:template>

          </xsl:stylesheet>

          如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!

          、參考

          (1)https://blog.csdn.net/weixin_42565127/article/details/130927438

          (2)https://www.runoob.com/csharp/csharp-namespace.html

          (3)https://blog.csdn.net/wuqiang20081807/article/details/78470003

          1、成員修飾符

          public、protected、private對應著類或成員的權限。

          internal也是一各類型/成員修飾符(被修飾的類型或者成員稱為內部類型或成員),只是它所修飾的類只能在同一個程序集中被訪問,而同一個程序集表示同一個dll程序集或同一個exe程序集。

          • Internal:訪問僅限于當前程序集。
          • protected internal:訪問限制到當前程序集或從包含派生的類型的類別。

          2、namespace命名空間的作用

          2.1功能

          命名空間的設計目的是提供一種讓一組名稱與其他名稱分隔開的方式。在一個命名空間中聲明的類的名稱與另一個命名空間中聲明的相同的類的名稱不沖突。

          命名空間可以將不同的程序集(功能)隔離開來。

          圖片來源https://www.runoob.com/csharp/csharp-namespace.html

          2.2命名空間定義

          命名空間的定義是以關鍵字 namespace 開始,后跟命名空間的名稱,如下所示:

          namespace namespace_name
          {
             // 代碼聲明
          }

          2.3對不同命名空間程序的調用

          為了調用支持命名空間版本的函數或變量,會把命名空間的名稱置于前面,如下所示:

          namespace_name.item_name;

          (1)測試例子

          namespace A_space
          {
              public class ChenSpaceTestClass1
              {
                  public void Run()
                  {
                      Console.WriteLine("---ChenSpaceAClass1_Run--");
          
                  }
              }
          }
          
          namespace B_space
          {
              //注意,故意同名了
              public class ChenSpaceTestClass1
              {
                  public void Run()
                  {
                      Console.WriteLine("---ChenSpaceBClass1_Run--");
          
                  }
              }
          }
          
          class Demo
          {
              public static void Main()
              {
                  A_space.ChenSpaceTestClass1 chenSpaceTestClass1_1=new A_space.ChenSpaceTestClass1();
                  chenSpaceTestClass1_1.Run();
          
                  B_space.ChenSpaceTestClass1 chenSpaceTestClass1_2=new B_space.ChenSpaceTestClass1();
                  chenSpaceTestClass1_2.Run();
              }
          }

          (2)測試結果

          2.4使用using對不同命名空間程序的調用

          使用 using 命名空間指令,這樣在使用的時候就不用在前面加上命名空間名稱。

          (1)測試例子如下

          using first_space;
          using second_space;
          
          namespace first_space
          {
              class abc
              {
                  public void func()
                  {
                      Console.WriteLine("Inside first_space");
                  }
              }
          }
          namespace second_space
          {
              class efg
              {
                  public void func()
                  {
                      Console.WriteLine("Inside second_space");
                  }
              }
          }
          class TestClass
          {
              static void Main()
              {
                  abc fc=new abc();
                  efg sc=new efg();
                  fc.func();
                  sc.func();
              }
          }

          (2)可以看出使用了相應的using后,abc和efg類都可以直接使用了

          (3)測試結果

          3、程序集

          3.1認識誤區

          參考了https://blog.csdn.net/wuqiang20081807/article/details/78470003

          • internal,英文含義是“內部的”,這時候基礎不扎實的同學,可能就混淆了這個“內部的”的確切含義,到底是指“同一命名空間”的內部,還是“同一程序集”的內部,本人就是突然被問到這個問題的時候,真的就猶豫了,而且曾經一度以為就是“同一命名空間”的內部(話外:我們太多時候都自以為了,其實只要自己稍微MSDN查一下,就很清楚了)。
          • 微軟MSDN官方的解釋這個內部就是“同一程序集”的內部,也就是說,internal修飾的方法或者屬性,只要是在同一個程序集的中的其他類都可以訪問,如果二者不在同一命名空間,只要使用using引用上相應的命名空間即可,這里,從另外一個方面也間接看出命名空間并不是界定訪問級別的,而是保證全局的類唯一性的,下面就從現實生活中解釋下internal的實際作用。

          3.2程序集

          (1)程序集可以理解成一個個不同的DLL

          (2)程序集和命名空間不存在必然聯系,一個程序集可以包含多個命名空間,同一個命名空間也可以分放在幾個程序集。

          (3)命名空間是邏輯上的組織單元,而程序集是物理上的組織單元。一個程序集可以包含多個命名空間,而一個命名空間也可以跨越多個程序集。程序集的名稱通常包含其命名空間,以便于識別和管理。


          4、Internal測試例子

          4.1 在同一個程序集內部internal修飾的類可以訪問

          在vs中一個項目會生成一個dll文件,因此這個dll或這個項目也就是一個程序集。比如下面的一個dll

          namespace Common
          {
              internal class A
              {
                  public void aa()
                  {
                  }
              }
              public class B
              {
                  public void bb()
                  {
                      //這樣是正確的
                      A a=new A();
                      a.aa();
                  }
              }
          }

          4.2 在另一個程序集內部internal修飾的類不可訪問

          如果另一個項目TestWeb引用了4.1中的dll,即common.dll,即

          using Common;
          namespace TestWeb
          {
              public class Test
              {
                  public void test_1()
                  {
                      //這樣是出錯的
                      A a=new A();
                      a.aa();
           
                      //這樣是正確的
                      B b=new B();
                      b.bb();
                  }
              }
          }

          4.3protected internal

          一般一個成員或類型只能有一個訪問修飾符,但使用protected internal組合時除外,它的訪問僅限于從包含類派生的當前程序集或類型。即我們可以在本程序集中訪問,也可以在其他程序集中繼承訪問。如下:

          名空間

          命名空間(namepace)

          主要作用就是減少全局變量,避免變量之間的命名沖突,使全局空間最大化的整潔。

          不使用命名空間模式的情況如下

          function a(){}

          function b(){}

          var c=2;

          var d=5;

          var e={};

          e.name="tina";

          var f={};

          以上有兩個全局函數,兩個全局對象,兩個全局變量,這樣無疑是有潛在風險的,比如無意中創建了一個與變量d同名的函數。

          typeof d//"number"

          function d(){alert(123)};

          typeof d;//"function"變量d的數據類型和值被改變了。

          這樣的結果雖然可能是無意的,但卻是很糟糕的。

          改為命名空間模式如下:

          var MYNP={};

          MYNP.a=function(){};

          MYNP.b=function(){};

          MYNP.c=2;

          MYNP.d=5;

          MYNP.e={};

          MYNP.e.name="Tina";

          MYNP.f={};

          也可以簡寫為

          var MYNP={

          a:function(){},

          b:function(){},

          c:2,

          d:5,

          e:{name:"Tina"},

          f:{}

          }

          function d(){};

          typeof MYNP.d//"number"

          typeof d//"function"


          主站蜘蛛池模板: 中文字幕日韩一区| 日韩一区二区三区不卡视频| 日本在线视频一区二区| 日本在线视频一区| 亚洲av无码成人影院一区| 色久综合网精品一区二区| 人妻体内射精一区二区三四| 国产精品男男视频一区二区三区| 四虎成人精品一区二区免费网站 | 国模无码一区二区三区 | 99精品国产高清一区二区三区| 国产综合精品一区二区| 日韩精品福利视频一区二区三区| 亚洲一区二区三区在线网站 | 交换国产精品视频一区| 成人免费视频一区| 国产精品亚洲产品一区二区三区 | 亚洲av无码片区一区二区三区 | 日韩三级一区二区三区| 精品人妻一区二区三区毛片| 无码少妇一区二区三区浪潮AV| 国产亚洲福利精品一区| 好爽毛片一区二区三区四无码三飞| 国产精品一区二区资源| 一区二区三区日韩| 国产一区美女视频| 亚洲一区二区三区四区视频| 无码av中文一区二区三区桃花岛| 亚洲午夜精品第一区二区8050| 中文字幕在线一区二区三区| 亚洲福利一区二区| 久久精品国产一区二区三区不卡| 久久99国产精品一区二区| 福利电影一区二区| 一区二区三区观看免费中文视频在线播放 | 色狠狠色噜噜Av天堂一区| 亚洲一区二区三区在线观看网站| 亚洲一区二区三区香蕉| 精品视频一区二区观看| 国产精品视频一区二区三区无码| 国语对白一区二区三区|