自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

刪除多余的屬性 xmlns=""

開發(fā)
Xml是Internet環(huán)境中跨平臺(tái)的,依賴于內(nèi)容的技術(shù),是當(dāng)前處理結(jié)構(gòu)化文檔信息的有力工具。本文介紹了刪除XML中的多余屬性的方法,通過例子驗(yàn)證,哪一種方法更好。

很早前就遇到這個(gè)空值的屬性,它既出現(xiàn)在 html 文檔中,也出現(xiàn)在 xml 中,一直都回避,放之任之,反正也不影響文檔的正確性。隱隱約約過了大半年,終于有一天下定決心,一定要把這個(gè)問題徹徹底底搞個(gè)透,認(rèn)真一分析,卻發(fā)現(xiàn)這是一個(gè) xml 命名空間基礎(chǔ)知識(shí),不是一個(gè)需要捋起兩管衣袖再加深呼吸兩口才能解決的問題。

首先來重現(xiàn)此屬性,現(xiàn)有的XML數(shù)據(jù)(people.xml):

  1. <ROOT xmlns\="http://www.example.com">   
  2. <NAME>張三</NAME>   
  3. </ROOT>  

(注意上面的xmlns后面帶有一個(gè)反斜杠,是為了防止語法高亮組件SyntaxHighlighter異常而加的,請(qǐng)透明視之,以下同)程序給root增加一個(gè)age節(jié)點(diǎn)用于描述“張三”的年齡(VBScript):

  1. Dim dom    
  2. Set dom = CreateObject("MSXML2.DOMDocument")    
  3. dom.async = False   
  4. dom.load "people.xml"    
  5. Dim age    
  6. Set age = dom.createElement("age")    
  7. age.text = 25   
  8. dom.documentElement.appendChild age    
  9. dom.save "people.xml"  

修改后的 people.xml 如下:

  1. <ROOT xmlns\="http://www.example.com">   
  2. <NAME>張三</NAME>   
  3. <AGE xmlns="">25</AGE>   
  4. </ROOT>  

文檔的root節(jié)點(diǎn)定義了一個(gè)默認(rèn)的命名空間 http://www.example.com,即root元素的所有子孫元素都在此空間之下(除非它們另行定義有空間)。程序創(chuàng)建 age 節(jié)點(diǎn)時(shí)沒有指明此節(jié)點(diǎn)具有哪個(gè)空間,即 age 的命名空間為空值,空值不等于 http://www.example.com,相當(dāng)于 age 有自己的私有空間,它與父輩的空間不同,理所當(dāng)然地會(huì)出現(xiàn) xmlns 屬性。

要去除此屬性有兩個(gè)方法:

1.去除 age 祖先節(jié)點(diǎn)默認(rèn)的命名空間

2.創(chuàng)建 age 節(jié)點(diǎn)時(shí)指明其空間為祖先定下的默認(rèn)空間

第一種方案一般是不會(huì)被采納的,為了兒孫輩不太可能廢掉祖先定下的規(guī)矩。第二種方案最簡(jiǎn)單:使用 createNode 方法替換 createElement 方法。

  1. .Set age = dom.createNode(1,"age","http://www.example.com")  

效果立現(xiàn)。

除了程序會(huì)遇到命名空間繼承的問題,xsl 模板中創(chuàng)建的元素也有此問題。比如創(chuàng)建元素:

  1. <XSL:ELEMENT name="a">   
  2. <XSL:ATTRIBUTE name="href">http://www.example.com</XSL:ATTRIBUTE>   
  3. <XSL:VALUE-OF select="'Hello world'" />   
  4. </XSL:ELEMENT>  

該 XSL 模板是由 Dreamweaver 創(chuàng)建,在經(jīng)歷 XSL 處理器轉(zhuǎn)換后,輸出的 a 元素同樣也包含一個(gè) xmlns="" 屬性。根本原因還是創(chuàng)建的元素與其祖先的命名空間不一致。用 Dreamweaver 創(chuàng)建一個(gè)空的 XSLT(整頁) 頁面,其根節(jié)點(diǎn)
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

只聲明了名為 xsl 的空間,它用于實(shí)現(xiàn)所有的xslt元素: <xsl:xxxx />, 因此用 xsl 的方法創(chuàng)建出來的元素,它們的空間自然就在根節(jié)點(diǎn)聲明空間之下,該死的是根節(jié)點(diǎn)并沒有定義有默認(rèn)空間,所以 xsl 方法創(chuàng)建的元素最終都將有一個(gè) xmlns="" 屬性。

這里需要注意到 XSLT 模板里面的 html 元素為了適合 w3c 所推薦的 xhtml 標(biāo)準(zhǔn),它聲明了一個(gè)默認(rèn)空間
<html xmlns="http://www.w3.org/1999/xhtml"> 

這個(gè)空間是對(duì)最終的 html 代碼有效的,它對(duì) xslt 沒有任何作用。

解決的方法同樣有兩種:

1.給 xslt 頁面的根節(jié)點(diǎn) xsl:stylesheet 聲明默認(rèn)空間,令它與 html 元素的默認(rèn)空間值一致

2.使用 xsl 方法創(chuàng)建元素時(shí)指明其空間,只要空間與默認(rèn)空間一致,就不會(huì)出現(xiàn) xmlns=""

這里推薦采用第一種方案,因?yàn)橹恍柙?xsl 文檔的根節(jié)點(diǎn)聲明了與 html 元素一致的默認(rèn)命名空間,用 xsl 方法創(chuàng)建的元素就與祖先的空間一致,就不會(huì)出現(xiàn) xmlns="",一勞永逸。

方法二就需要每次都使用

  1. <XSL:ELEMENT name="xx" namespace="http://www.w3.org/1999/xhtml">   
  2. ....   
  3. </XSL:ELEMENT>  

明顯第一種方案勝出。

繼續(xù)深入,怎樣讓 Dreamweaver 創(chuàng)建的 XSLT(整頁) 模板根元素 xsl:stylesheet 自動(dòng)帶有默認(rèn)命名空間xmlns="http://www.w3.org/1999/xhtml"。 

找到文件:
C:\Program Files\Adobe\Adobe Dreamweaver CS3\configuration\DocumentTypes\MMDocumentTypeDeclarations.xml
用記事本打開,在文件底部,可以看到 Dreamweaver 創(chuàng)建 xslt 頁面時(shí)所使用的模板,只需把默認(rèn)的命名空間加在此處就 OK 了。

【編輯推薦】

  1. XML中的層疊樣式
  2. 打造基于 XSL 的模板框架
  3. 網(wǎng)站開發(fā)應(yīng)該知道的事
  4. 數(shù)據(jù)庫(kù)開發(fā)10個(gè)最重要特點(diǎn)
  5. 認(rèn)識(shí)基于中間件的軟件開發(fā)方法
責(zé)任編輯:于鐵 來源: 笛子的博客
相關(guān)推薦

2010-04-30 10:59:11

Unix Swap

2010-02-23 09:59:11

Windows 7刪除多于賬戶

2012-02-15 11:03:25

手機(jī)拍照圖像處理

2021-05-10 08:45:34

JavaScript開發(fā)對(duì)象

2011-03-03 09:42:13

PureFTPd

2021-03-26 23:41:19

JavaScript對(duì)象開發(fā)

2012-02-13 09:11:13

云存儲(chǔ)云計(jì)算

2012-02-14 13:42:22

云計(jì)算云存儲(chǔ)

2010-04-20 14:47:07

Windows 7關(guān)機(jī)

2010-03-23 08:46:07

Windows 7系統(tǒng)優(yōu)化

2023-10-13 08:00:00

網(wǎng)絡(luò)層開發(fā)

2024-11-18 11:20:00

視頻大模型

2023-11-01 10:59:13

數(shù)據(jù)中心服務(wù)器

2009-07-27 16:43:51

自定義Eclipse菜

2021-10-20 09:24:47

Windows性能微軟

2010-12-01 10:49:52

Google App

2013-08-09 09:49:08

云計(jì)算IT

2023-11-20 14:41:34

Python屬性

2023-12-01 10:20:04

Python類屬性

2021-11-29 10:55:11

線程池Java面試
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)