搜尋
首頁後端開發XML/RSS教程JSON和XML-不可同日而語的詳解

【編按】本文作者 Yegor Bugayenko 是 Teamed.io 公司的共同創辦人,在軟體品質和工程管理方法領域有深入的研究。本文中,作者透過比較 JSON ,向大家更詳細地闡述了 XML 的四大特性,幫助大家在搭建專案時選擇適合的資料格式類型。

很多人在心裡糾結,如果 JSON 和 XML 相比,誰更好誰更快?在接下來的新專案中到底選擇哪一個?別傻了!完全沒有可比性。就像自行車和 AMG S65 ,你能說哪個更好嗎?雖然兩者都是交通工具,但有些情況下,自行車反而更方便。所以 JSON 和 XML 也是一樣,它們都各有所長,完全沒有必要比較。

下面舉一個簡單的JSON 資料(140個字元):

{
  "id": 123,
  "title": "Object Thinking",
  "author": "David West",
  "published": {
    "by": "Microsoft Press",
    "year": 2004
  }
}

同樣的資料在XML 中會表示如下(167個字元):

<?xml version="1.0"?>
<book id="123">
  <title>Object Thinking</title>
  <author>David West</author>
  <published>
    <by>Microsoft Press</by>
    <year>2004</year>
  </published>
</book>

很容易看出其中的差別,前者更簡潔更容易理解,而且能在JavaScript 中能完美解析。所以,我們便可以簡單粗暴地放棄 XML 選擇 JSON 了嗎?誰還會需要已歷時15年的重量級語言呢?

但恰恰相反,本人就非常喜愛 XML ,且聽下文分解。

但千萬別誤會,本文並不是反對 JSON 。 JSON 的確是很好的資料格式,但它只是一種資料格式,經常被暫時用於將資料從 A 點傳到 B 點。它比 XML 更簡短易讀,但僅此而已。

XML 是一種非常強大的語言,而非只是單純的資料格式。相對於 JSON 和其他簡單的資料格式來說,如 YAML ,XML 至少有以下四個重要特性。

#為了從文件中得到上文類似的出版年份,只需要傳送一個簡單的XPath 請求:/book/published/year/text() 。但是,必須得有一個 XPath 處理器來解析請求並回傳2004。好就好在XPath2.0是集functions、predicates、axes 等為一體的強大檢索引擎,在不用Java 程式碼編寫任何遍歷的邏輯的情況下,就可以在XPath 請求中以自然語言形式加入任何邏輯,例如,你可以直接發出請求“How many books were published by David West in 2004?” ,便能透過XPath 得到答案。而這是 JSON 所不能做到的。

  • Attributes and Namespaces

可以將 metadata 加到 XML 資料中,正如上面的 id 屬性一樣。資料保存在元素中,例如圖書作者的姓名,而 metadata(資料的資料)應該保存為屬性,這會大大有利於組織和結構化資訊。最重要的是,元素和屬性都可以標記為屬於某個 namespaces ,當多個應用程式使用相同 XML 文件時,這種技術的優點會非常明顯。

  • XML Schema

#試想這樣的情況,當你在一台機器上建立了XML 文檔,在其他電腦上做了幾次修改,然後又傳到別的電腦上使用,所以必須確保文件結構沒有被中間操作破壞。例如可能有人用 儲存出版日期,但別人可能會使用 ISO-8601 格式的 。為了避免這樣的結構混亂,我們可以建立一個說明文件 XML Schema ,和主文檔一起進行儲存。在每次操作主文件之前,都需要透過 schema 檔案檢查其正確性,這是生產過程中的整合測試。 RelaxNG 也是類似的機制,但會簡單很多,如果覺得 XML Schema 太過複雜不妨試試用 RelaxNG。

  • XSL

#事實上,可以不用任何 Java/Ruby 等程式碼就能完成 XML 文件的修改。簡單的說,你只需要建立一個 XSL transformation 文件並將其應用於原始 XML ,然後得到一個新的 XML 。 XSL 語言(純功能性語言)是專為分層資料操作設計的,它比 Java 或任何其他物件導向/流程的語言都更適合此任務。借助 XSL 可以將 XML 轉換為任何形式,包括純文字和 HTML 。很多人抱怨 XSL 太複雜,但其實沒那麼難, XSL 的核心功能其實很簡單,大家不妨一試。

以上所述並不是 XML 的全部特徵,但這四大特性的確用途非凡。它們不僅可以讓文件的“自給自足”,還能進行自我驗證(XML Schema),進而知道如何修改(XSL),最後還能方便地獲得其中的文件內容(Xpath)。

同時,市面上還有許多以 XML 為基礎發展的語言、標準和應用,包括  Xforms、 SVG、 MathML、 RDF、 OWL、 WSDL 等。但一般的主流項目中都不會用到,因為它們的針對性都太強。

設計JSON 的用途並非是滿足以上特性,儘管JSON 領域現在努力嘗試,包括用於查詢的JSONPath 、一些轉換工具和用於驗證的json-schema ,但和強大的XML 相比這只是微不足道的模仿,筆者不認為會有長遠發展,遲早會消失。

綜上所述, JSON 是一種沒有過多附加功能的簡單資料格式,其最佳的使用情況是在 AJAX 下,除此之外,本人都強烈推薦大家使用 XML。

OneAPM 提供您端對端的 Java 應用效能解決方案,我們支援所有常見的 Java 框架及應用程式伺服器,協助您快速發現系統瓶頸,定位異常根本原因。分鐘級部署,即時體驗,Java 監控從來沒有這麼簡單。想閱讀更多技術文章,請造訪 OneAPM 官方技術部落格。

以上是JSON和XML-不可同日而語的詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
XML在RSS中的優勢:技術深度潛水XML在RSS中的優勢:技術深度潛水Apr 23, 2025 am 12:02 AM

XML在RSS中具有結構化數據、可擴展性、跨平台兼容性和解析驗證的優勢。 1)結構化數據確保內容的一致性和可靠性;2)可擴展性允許添加自定義標籤以適應內容需求;3)跨平台兼容性使其在不同設備上無縫工作;4)解析和驗證工具確保Feed的質量和完整性。

XML中的RSS:揭示內容聯合的核心XML中的RSS:揭示內容聯合的核心Apr 22, 2025 am 12:08 AM

RSS在XML中的實現方式是通過結構化的XML格式來組織內容。 1)RSS使用XML作為數據交換格式,包含頻道信息和項目列表等元素。 2)生成RSS文件需按規範組織內容,發佈到服務器供訂閱。 3)RSS文件可通過閱讀器或插件訂閱,實現內容自動更新。

超越基礎:高級RSS文檔功能超越基礎:高級RSS文檔功能Apr 21, 2025 am 12:03 AM

RSS的高級功能包括內容命名空間、擴展模塊和條件訂閱。 1)內容命名空間擴展RSS功能,2)擴展模塊如DublinCore或iTunes添加元數據,3)條件訂閱根據特定條件篩選條目。這些功能通過添加XML元素和屬性實現,提升信息獲取效率。

XML主鏈:RSS提要如何結構XML主鏈:RSS提要如何結構Apr 20, 2025 am 12:02 AM

RSSFEEDSUSEXMLTOSSTRUCTURECONTUPDATE.1)XMLPROVIDEDIDESAHIERARCHICALSTRUCTUREFFORDATA.2)THEELEMENTDEFINESTHEEFEED'SIDENTITYANDCONTAINS ELEMENT.3)ELEMENTEMERPREPRESERPRESENTERPRESENTIVIDIVIVELPIECTUALPIECES.4)RSSSSSSSSSSSISEXTEXTENSIBLERECTICERSINCREECTINCERINCTICENT.5)

RSS和XML:了解Web內容的動態二重奏RSS和XML:了解Web內容的動態二重奏Apr 19, 2025 am 12:03 AM

RSS和XML是用於網絡內容管理的工具。 RSS用於發布和訂閱內容,XML用於存儲和傳輸數據。它們的工作原理包括內容髮布、訂閱和更新推送。使用示例包括RSS發布博客文章和XML存儲書籍信息。

RSS文檔:Web聯合組織的基礎RSS文檔:Web聯合組織的基礎Apr 18, 2025 am 12:04 AM

RSS文檔是基於XML的結構化文件,用於發布和訂閱頻繁更新的內容。它的主要作用包括:1)自動化內容更新,2)內容聚合,3)提高瀏覽效率。通過RSSfeed,用戶可以訂閱並及時獲取來自不同來源的最新信息。

解碼RSS:內容提要的XML結構解碼RSS:內容提要的XML結構Apr 17, 2025 am 12:09 AM

RSS的XML結構包括:1.XML聲明和RSS版本,2.頻道(Channel),3.條目(Item)。這些部分構成了RSS文件的基礎,允許用戶通過解析XML數據來獲取和處理內容信息。

如何解析和利用基於XML的RSS提要如何解析和利用基於XML的RSS提要Apr 16, 2025 am 12:05 AM

RSSFEEDSUSEXMLTOSYNDICATECONTENT; PARSINGTHEMINVOLVESLOADINGINGINGINGINSSTRUCTURE,andExtractingData.ApplicationsIncludeBuildBuildingNewSagGregatorSaterNewSagGregatorSator andTrackingPodcastepodcastepisodes。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。