刪除多餘的屬性 xmlns=""
- Xml是Internet環境中跨平臺的,依賴於內容的技術,是當前處理結構化文件資訊的有力工具。本文介紹了刪除XML中的多餘屬性的方法,透過例子驗證,哪一種方法更好。
很早前就遇到這個空值的屬性,它既出現在 html 文件中,也出現在 xml 中,一直都回避,放之任之,反正也不影響文件的正確性。隱隱約約過了大半年,終於有一天下定決心,一定要把這個問題徹徹底底搞個透,認真一分析,卻發現這是一個 xml 名稱空間基礎知識,不是一個需要捋起兩管衣袖再加深呼吸兩口才能解決的問題。
首先來重現此屬性,現有的XML資料(people.xml):
- <ROOT xmlns\="">
- <NAME>張三NAME>
- ROOT>
(注意上面的xmlns後面帶有一個反斜槓,是為了防止語法高亮元件SyntaxHighlighter異常而加的,請透明視之,以下同)程式給root增加一個age節點用於描述“張三”的年齡(VBScript):
- Dim dom
- Set dom = CreateObject("MSXML2.DOMDocument")
- dom.async = False
- dom.load "people.xml"
- Dim age
- Set age = dom.createElement("age")
- age.text = 25
- dom.documentElement.appendChild age
- dom.save "people.xml"
修改後的 people.xml 如下:
- <ROOT xmlns\="">
- <NAME>張三NAME>
- <AGE xmlns="">25AGE>
- ROOT>
文件的root節點定義了一個預設的名稱空間 ,即root元素的所有子孫元素都在此空間之下(除非它們另行定義有空間)。程式建立 age 節點時沒有指明此節點具有哪個空間,即 age 的名稱空間為空值,空值不等於 ,相當於 age 有自己的私有空間,它與父輩的空間不同,理所當然地會出現 xmlns 屬性。
要去除此屬性有兩個方法:
1.去除 age 祖先節點預設的名稱空間
2.建立 age 節點時指明其空間為祖先定下的預設空間
第一種方案一般是不會被採納的,為了兒孫輩不太可能廢掉祖先定下的規矩。第二種方案最簡單:使用 createNode 方法替換 createElement 方法。
- .Set age = dom.createNode(1,"age","")
效果立現。
除了程式會遇到名稱空間繼承的問題,xsl 模板中建立的元素也有此問題。比如建立元素:
- <XSL:ELEMENT name="a">
- <XSL:ATTRIBUTE name="href">XSL:ATTRIBUTE>
- <XSL:VALUE-OF select="'Hello world'" />
- XSL:ELEMENT>
該 XSL 模板是由 Dreamweaver 建立,在經歷 XSL 處理器轉換後,輸出的 a 元素同樣也包含一個 xmlns="" 屬性。根本原因還是建立的元素與其祖先的名稱空間不一致。用 Dreamweaver 建立一個空的 XSLT(整頁) 頁面,其根節點
只宣告瞭名為 xsl 的空間,它用於實現所有的xslt元素:
這裡需要注意到 XSLT 模板裡面的 html 元素為了適合 w3c 所推薦的 xhtml 標準,它宣告瞭一個預設空間
這個空間是對最終的 html 程式碼有效的,它對 xslt 沒有任何作用。
解決的方法同樣有兩種:
1.給 xslt 頁面的根節點 xsl:stylesheet 宣告預設空間,令它與 html 元素的預設空間值一致
2.使用 xsl 方法建立元素時指明其空間,只要空間與預設空間一致,就不會出現 xmlns=""
這裡推薦採用第一種方案,因為只需在 xsl 文件的根節點宣告瞭與 html 元素一致的預設名稱空間,用 xsl 方法建立的元素就與祖先的空間一致,就不會出現 xmlns="",一勞永逸。
方法二就需要每次都使用
- <XSL:ELEMENT name="xx" namespace="">
- ....
- XSL:ELEMENT>
明顯第一種方案勝出。
繼續深入,怎樣讓 Dreamweaver 建立的 XSLT(整頁) 模板根元素 xsl:stylesheet 自動帶有預設名稱空間xmlns=""。
找到檔案:
C:\Program Files\Adobe\Adobe Dreamweaver CS3\configuration\DocumentTypes\MMDocumentTypeDeclarations.xml
用記事本開啟,在檔案底部,可以看到 Dreamweaver 建立 xslt 頁面時所使用的模板,只需把預設的名稱空間加在此處就 OK 了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/20200170/viewspace-739840/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux刪除多餘核心Linux
- Centos 6.9 刪除多餘的核心版本CentOS
- class屬性的新增刪除
- oracle刪除多餘重複行Oracle
- JavaScript 刪除class屬性JavaScript
- Linux多ip地址如何刪除多餘ipLinux
- MacBook Pro如何刪除多餘的專注模式Mac模式
- win10怎麼刪除右鍵多餘選項 win10刪除右鍵多餘選項的方法Win10
- win10刪除多餘啟動項怎麼操作 win10如何刪除多餘的開機啟動項Win10
- win10如何刪去多餘的本地連線_win10刪除多餘本地連線的方法Win10
- 刪除Kali Linux多餘的系統架構Linux架構
- JavaScript刪除和清空物件屬性JavaScript物件
- 如何刪除win10多餘的開機啟動項_win10刪除多餘的系統啟動項步驟Win10
- 如何刪除MacBook Pro多餘專注模式呢?Mac模式
- win10怎麼刪掉多餘賬戶_win10系統怎麼刪除多餘的賬戶Win10
- js為物件新增和刪除屬性JS物件
- 如何刪除使用prop()方法新增的屬性
- source insight 儲存時刪除多餘空格,去除多餘空格 space tab鍵
- Win10怎麼刪除多餘的管理員賬號?Win10系統刪除多餘管理員賬號的詳細步驟Win10
- MacBook Pro刪除多餘專注模式詳細教程Mac模式
- Python如何刪除字串中多餘空白字元?Python字串字元
- 如何刪除電腦系統中多餘的dll檔案
- 巧用“查詢替換”刪除Word文件多餘的空行(轉)
- 如何刪除多餘的win10管理員_win10刪除管理員賬戶的方法Win10
- win10刪除輸入法在哪裡 win10刪除多餘的輸入法Win10
- 刪除win10多餘開機引導的方法_win10怎麼刪掉多餘的開機引導項Win10
- 如何刪除資料夾右鍵選單多餘項
- [BUG反饋]刪除模型屬性時 不會刪除模型表的field_sort模型
- Win10右鍵圖形屬性如何刪除 win10刪除右鍵圖形屬性選項的步驟Win10
- linux系統中刪除eth*.bak或者多餘的網路卡Linux
- OGG-extract程式對應的多餘trail檔案的刪除AI
- javascript如何動態刪除或者新增物件屬性JavaScript物件
- javascript delete刪除屬性的注意點簡單介紹JavaScriptdelete
- Vue 不能檢測到物件屬性的新增或刪除,注意!!!Vue物件
- mySql刪除多個表 刪除多個欄位的SQLMySql
- win10怎麼刪除多餘的印表機_win10如何刪除不需要的印表機裝置Win10
- 如何Super Vectorizer從Mac 上的影像中刪除多餘的顏色區域?Mac
- jQuery新增和刪除元素class屬性例項程式碼jQuery