国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JS學習筆記(第19章)(E4X)

lijinke666 / 2299人閱讀

摘要:的類型類型創建對象的方法調用構造函數使用字面量將數據直接指定給一個變量。表示解析器應該忽略標記中的處理指令。這三個設置會影響對傳入到構造函數中的字符串以及字面量的解析。

1、E4X的類型 1.1 XML類型

1、創建XML對象的方法

(1)調用構造函數:

var x = new XML();
var x = new XML("Nicholas " +"Zakas");

(2)使用 XML 字面量將XML數據直接指定給一個變量。XML字面量就是嵌入到JavaScript代碼中的XML代碼。

var employee = 
                        Nicholas C. Zakas
                ;

2、XML 類型的toXMLString()方法會返回 XML 對象及其子節點的 XML 字符串表示。另一方面,該類型的 toString()方法則會基于不同 XML 對象的內容返回不同的字符串。

var data = Nicholas C. Zakas;
alert(data.toString()); //"Nicholas C. Zakas"
alert(data.toXMLString()); //"Nicholas C. Zakas"
1.2 XMLList類型

XMLList 類型表現 XML 對象的有序集合。 XMLList 的 DOM 對等類型是 NodeList。

1、創建XMLList對象的方法
(1)可以向其中傳入一個待解析的 XML 字符串;

var list = new XMLList("");

(2)還可以使用加號( +)操作符來組合兩個或多個 XML 對象,從而創建 XMLList 對象。

var list =  +  ;  //這個例子使用加號操作符組合了兩個 XML 字面量,結果得到一個 XMLList。

2、每個 XMLList 對象都有 length()方法,用于返回對象中包含的元素數量。

alert(employees.employee.length()); //2

(3)XMLList 對象的 toString()和 toXMLString()方法返回相同的字符串值,也就是將其包含的XML 對象序列化之后再拼接起來的結果。

1.3 Namespace類型

使用 Namespace 對象來表現命名空間。通常, Namespace 對象是用來映射命名空間前綴和命名空間 URI 的。
1、創建Namespace對象的方法

(1)使用 Namespace構造函數,傳入 URI 或前綴加 URI,就可以初始化 Namespace 對象

var ns = new Namespace();
var ns = new Namespace("http://www.wrox.com/"); //沒有前綴的命名空間
var wrox = new Namespace("wrox", "http://www.wrox.com/"); //wrox 命名空間

(2)通過 XML 構造函數解析的 XML 字符串中包含命名空間信息,那么就會自動創建 Namespace 對象。然后,就可以通過前綴和namespace()方法來取得對 Namespace
對象的引用。

var xml = 
Hello World!
;
var wrox = xml.namespace("wrox");
alert(wrox.uri);
alert(wrox.prefix);

2、可以使用 prefix 和 uri 屬性來取得 Namespace 對象中的信息

var ns = new Namespace("http://www.wrox.com/"); //沒有前綴的命名空間
var wrox = new Namespace("wrox", "http://www.wrox.com/"); //wrox 命名空間
alert(ns.uri); //"http://www.wrox.com/"
alert(ns.prefix); //undefined
alert(wrox.uri); //"http://www.wrox.com/"
alert(wrox.prefix); //"wrox"

3、Namespace 對象的 toString()方法始終會返回命名空間 URI

1.4 QName類型

QName 類型表現的是 XML 對象的限定名,即命名空間與內部名稱的組合。

1、創建 QName對象的方法

(1)向 QName 構造函數中傳入名稱或 Namespace 對象和名稱,可以手工創建新的 QName 對象。

var wrox = new Namespace("wrox", "http://www.wrox.com/");
var wroxMessage = new QName(wrox, "message"); //表示"wrox:message"

創建了 QName 對象之后,可以訪問它的兩個屬性: uri 和 localName。其中,uri屬性返回在創建對象時指定的命名空間的 URI(如果未指定命名空間,則返回空字符串),而 localName 屬性返回限定名中的內部名稱。

alert(wroxMessage.uri); //"http://www.wrox.com/"
alert(wroxMessage.localName); //"message"

(2)在解析 XML 結構時,會為表示相應元素或特性的 XML 對象自動創建 QName 對象。可以使用這個 XML對象的name()方法取得與該XML對象關聯的 QName 對象。

var xml = < wrox:root xmlns:wrox="http://www.wrox.com/">
Hello World!
 ;
var wroxRoot = xml.name();
alert(wroxRoot.uri); //"http://www.wrox.com/"
alert(wroxRoot.localName); //"root"

2、(1)使用 setName()方法并傳入一個新 QName 對象,可以修改 XML 對象的限定名。

xml.setName(new QName("newroot"));

(2)如果該名稱不屬于任何命名空間,則可以像下面這樣使用 setLocalName()方法來修改內部名稱。

xml.setLocalName("newtagname");
2、一般用法

1、使用點號加特性或標簽名的方式來訪問其中不同的層次和結構。每個子元素都是父元素的一個屬性,而屬性名與元素的內部名稱相同。

var employee = 
Nicholas C. Zakas
;
alert(employee.name); //"Nicholas C. Zakas"、

2、如果你不確定子元素的內部名稱,或者你想訪問所有子元素,不管其名稱是什么,也可以像下面這樣使用星號( *)

var allChildren = employees.*; //返回所有子元素,不管其名稱是什么
alert(employees.*[0].name); //"Nicholas C. Zakas"

3、還可以使用 child()方法。將屬性名或索引值傳遞給 child()方法,也會得到相同的值。

var firstChild = employees.child(0); //與 employees.*[0]相同
var employeeList = employees.child("employee"); //與 employees.employee 相同
var allChildren = employees.child("*"); //與 employees.*相同

4、為了再方便一些,還有一個children()方法始終返回所有子元素;

var allChildren = employees.children(); //與 employees.*相同

5、方法 elements()的行為與 child()類似,區別僅在于它只返回表示元素的 XML對象。

var employeeList = employees.elements("employee"); //與 employees.employee 相同
var allChildren = employees.elements("*"); //與 employees.*相同

6、要刪除子元素,可以使用 delete 操作符

elete employees.employee[0];
alert(employees.employee.length()); //1
2.1 訪問特性

1、訪問特性的三種方法:

(1)訪問特性也可以使用點語法,不過其語法稍有擴充,必須在名稱前面加上一個@字符。

var employees = 

Nicholas C. Zakas


Jim Smith

;
alert(employees.employee[0].@position); //"Software Engineer"

(2)使用child()方法來訪問特性,只要傳入帶有@前綴的特性的名稱即可

alert(employees.employee[0].child("@position")); //"Software Engineer"

(3)使用attribute()方法并傳入特性名,可以只訪問 XML 對象的特性。與 child()方法不同,使用 attribute()方法時,不需要傳入帶@字符的特性名。

alert(employees.employee[0].attribute("position")); //"Software Engineer"

2、要取得 XML 或 XMLList 對象中的所有特性,可以使用attributes()方法。這個方法會返回一個表示所有特性的 XMLList 對象。使用這個方法與使用@*的結果相同,如下面的例子所示。

//下面兩種方式都會取得所有特性
var atts1 = employees.employee[0].@*;
var atts2 = employees.employee[0].attributes();

3、對特性的操作

(1)修改

employees.employee[0].@position = "Author"; //修改 position 特性

(2)增加

employees.employee[0].@experience = "8 years"; //添加 experience 特性
employees.employee[0].@manager = "Jim Smith"; //添加 manager 特性

(3)刪除

delete employees.employee[0].@position; //刪除 position 特性
2.2 其他節點類型

1、E4X定義了表現XML文檔中所有部分的類型,包括注釋和處理指令。在默認情況上,E4X不會解析注釋或處理指令,因此這些部分不會出現在最終的對象層次中。如果想讓解析器解析這些部分,可以像下面這樣設置XML構造函數的下列兩個屬性。

XML.ignoreComments = false;
XML.ignoreProcessingInstructions = false;
//在設置了這兩個屬性之后, E4X 就會將注釋和處理指令解析到 XML 結構中。

2、使用nodeKind()方法可以得到 XML 對象表示的類型,該訪問可能會返回"text"、 "element"、 "comment"、"processinginstruction"或"attribute"。

3、可以只取得特定類型的節點,而這就要用到下列方法:

attributes():返回 XML 對象的所有特性。

comments():返回 XML 對象的所有子注釋節點。

elements(tagName):返回 XML 對象的所有子元素。可以通過提供元素的 tagName(標簽名)來過濾想要返回的結果。

processingInstructions(name):返回 XML 對象的所有處理指令。可以通過提供處理指令的 name(名稱)來過濾想要返回的結果。

text():返回 XML 對象的所有文本子節點。

4、使用hasSimpleContent()hasComplexContent()方法, 可以確定 XML 對象中是只包含文本,還是包含更復雜的內容。如果 XML 對象中只包含子文本節點,則前一個方法會返回 true;如果XML對象的子節點中有任何非文本節點,則后一個方法返回 true。來看下面的例子。

alert(employees.employee[0].hasComplexContent()); //true
alert(employees.employee[0].hasSimpleContent()); //false
alert(employees.employee[0].name.hasComplexContent()); //false
alert(employees.employee[0].name.hasSimpleContent()); //true
2.3 查詢

1、像下面這樣使用兩個點,則可以進一步擴展查詢的深度,查詢到所有后代節點。

var allDescendants = employees..*; //取得的所有后代節點

2、使用 descendants()方法來完成。在不給這個方法傳遞參數的情況下,它會返回所有后代節點(與使用..*相同),而傳遞一個名稱作為參數則可以限制結果。

var allDescendants = employees.descendants(); //所有后代節點
var allNames = employees.descendants("name"); //后代中的所有元素

3、可以取得所有后代元素中的所有特性,方法是使用下列任何一行代碼。

var allAttributes = employees..@*; //取得所有后代元素中的所有特性
var allAttributes2 = employees.descendants("@*"); //同上

4、完整的特性名來替換星號達到過濾特性的目的

var allAttributes = employees..@position; //取得所有 position 特性
var allAttributes2 = employees.descendants("@position"); //同上

5、除了訪問后代元素之外,還可以指定查詢的條件。

返回 position 特性值為"Salesperson"的所有元素,可以使用下面的查詢:
var salespeople = employees.employee.(@position == "Salesperson");

6、使用parent()方法能夠在 XML 結構中上溯,這個方法會返回一個 XML 對象,表示當前 XML 對象的父元素。如果在 XMLList 上調用 parent()方法,則會返回列表中所有對象的公共父元素。

var employees2 = employees.employee.parent();
2.4 構建和操作XML

1、將 XML 數據轉換成XML對象的方式:

(1)將 XML 字符串傳遞到XML構造函數中;

(2)使用 XML 字面量;

2、除了上面介紹的基本的 XML 構建語法之外,還有一些類似 DOM 的方法,簡介如下。

appendChild(child):將給定的 child 作為子節點添加到 XMLList 的末尾。

copy():返回 XML 對象副本。

insertChildAfter(refNode, child):將 child 作為子節點插入到 XMLList 中 refNode 的后面。

insertChildBefore(refNode, child):將 child 作為子節點插入到 XMLList 中 refNode 的前面。

prependChild(child):將給定的 child 作為子節點添加到 XMLList 的開始位置。

replace(propertyName, value):用 value 值替換名為 propertyName 的屬性,這個屬性可能是一個元素,也可能是一個特性。

setChildren(children):用 children 替換當前所有的子元素, children 可以是 XML 對象,也可是 XMLList 對象。

2.5 解析和序列化

E4X 將解析和序列化數據的控制放在了 XML 構造函數的一些設置當中。

1、與 XML 解析相關的設置有如下三個。

ignoreComments:表示解析器應該忽略標記中的注釋。默認設置為 true。

ignoreProcessingInstructions: 表示解析器應該忽略標記中的處理指令。默認設置為 true。

ignoreWhitespace:表示解析器應該忽略元素間的空格,而不是創建表現這些空格的文本節點。默認設置為 true。

這三個設置會影響對傳入到 XML 構造函數中的字符串以及 XML 字面量的解析。

2、另外,與 XML 數據序列化相關的設置有如下兩個。

prettyIndent:表示在序列化 XML 時,每次縮進的空格數量。默認值為 2。

prettyPrinting:表示應該以方便人類認讀的方式輸出 XML,即每個元素重起一行,而且子元素都要縮進。默認設置為 true

以上五個設置都保存在 settings 對象中,通過 XML 構造函數的 settings()方法可以取得這個對象

var settings = XML.settings();
alert(settings.ignoreWhitespace); //true
alert(settings.ignoreComments); //true

3、使用 defaultSettings()方法則可以取得一個包含默認設置的對象,因此任何時候都可以使用下面的代碼重置設置。

XML.setSettings(XML.defaultSettings());
2.6 命名空間

1、調用 setNamespace()方法后,相應的命名空間只會應用到調用這個方法的元素;

2、如果只想添加一個命名空間聲明,而不想改變元素,可以使用 addNamespace()方法并傳入Namespace 對象;

3、調用 removeNamespace()方法并傳入 Namespace 對象,可以移除表示特定命名空間前綴和 URI的命名空間聲明;注意,必須傳入絲毫不差的表示命名空間的 Namespace 對象;

4、有兩個方法可以返回與節點相關的 Namespace 對象的數組: namespaceDeclarations()和inScopeNamespaces()。 namespaceDeclarations()返回在給定節點上聲明的所有命名空間的數組,inScopeNamespaces()返回位于給定節點作用域中(即包括在節點自身和祖先元素中聲明的)所有命名空間的數組。

5、使用雙冒號( ::)也可以基于 Namespace 對象來查詢 XML 結構中具有特定命名空間的元素。例如,要取得包含在 wrox 命名空間中的所有元素,可以參考下面的代碼。

var messages = 
Hello world!
;
var wroxNS = new Namespace("wrox", "http://www.wrox.com/");
var wroxMessages = messages.wroxNS::message;

這里的雙冒號表示返回的元素應該位于其中的命名空間。注意,這里使用的是 JavaScript 變量,而不是命名空間前綴。

6、可以為某個作用域中的所有 XML 對象設置默認命名空間。為此,要使用 default xml namespace語句,并將一個 Namespace 對象或一個命名空間 URI 作為值賦給它。

3、其他變化

1、引入了for-each-in 循環,以便迭代遍歷每一個屬性并返回屬性的值。

2、4X 還添加了一個全局函數,名叫 isXMLName()。這個函數接受一個字符串,并在這個字符串是元素或特性的有效內部名稱的情況下返回 true。在使用未知字符串構建 XML 數據結構時,這個函數可以為開發人員提供方便。

alert(isXMLName("color")); //true
alert(isXMLName("hello world")); //false

3、E4X 對標準 ECMAScript 的最后一個修改是 typeof 操作符。在對 XML 對象或 XMLList 對象使用這個操作符時, typeof 返回字符串"xml"。但在對其他對象使用這個操作符時,返回的都是"object".

4、全面啟用E4X

要想完整地啟用 E4X,需要將

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/106159.html

相關文章

  • 高程3總結#19E4X

    摘要:在不給這個方法傳遞參數的情況下,它會返回所有后代節點與使用相同,而傳遞一個名稱作為參數則可以限制結果。,表示解析器應該忽略標記中的處理指令。數據序列化相關的設置,表示在序列化時,每次縮進的空格數量。 E4X E4X的類型 E4X定義了幾個新的全局類型 XML,XML結構中的任何一個獨立的部分 XMLList,XML對象的集合 Namespace,命名空間前綴與命名空間URI之間的映...

    DandJ 評論0 收藏0
  • JS學習筆記10)(DOM操作技術)

    摘要:動態腳本創建動態腳本有兩種方式插入外部文件和直接插入代碼。一般來說應該盡量減少訪問的次數,因為每次訪問,都會運行一次基于文檔的查詢。所以,可以考慮將從中取得的值緩存起來。 1、動態腳本 創建動態腳本有兩種方式:插入外部文件和直接插入Javascript代碼。 (1)調用外部文件 function loadScript(url) { var script = documen...

    UCloud 評論0 收藏0
  • JS學習筆記13)(事件)

    showImg(https://segmentfault.com/img/bVbvBAC?w=1534&h=912); var EventUtil = { addHandler: function(element, type, handler){ if (element.addEventListener){ element.addEventList...

    mylxsw 評論0 收藏0
  • JS學習筆記7)(函數表達式)

    摘要:遞歸閉包模仿塊級作用域私有變量小結在編程中,使用函數表達式可以無需對函數命名,從而實現動態編程。匿名函數也稱為拉姆達函數。函數聲明要求有名字,但函數表達式不需要。中的函數表達式和閉包都是極其有用的特性,利用它們可以實現很多功能。 1、遞歸 2、閉包 3、模仿塊級作用域 4、私有變量 5、小結 在JavaScript編程中,使用函數表達式可以無需對函數命名,從而實現動態編程。匿名函數也稱...

    xiaokai 評論0 收藏0
  • JavaScript 簡史

    摘要:正大力推進,網景通訊公司即將與他們達成一項協議,讓可以用在瀏覽器上。年月,網景通訊公司和達成協議將被重新命名為,它將會作為瀏覽器中小型客戶端任務的一種腳本語言,同時將會被提升為一種更大的開發富組件的專業工具。 本文轉載自:眾成翻譯譯者:網絡埋伏紀事審校: 為之漫筆鏈接:http://www.zcfy.cc/article/2389原文:https://auth0.com/blog/a-...

    pubdreamcc 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<