JAVA XML - 面試問題



親愛的讀者,這些基於 JAVA 的 XML 解析面試問題專為幫助您熟悉在基於 JAVA 的 XML 解析主題面試中可能遇到的問題型別而設計。根據我的經驗,優秀的訪談者在面試過程中很少會計劃提出任何特定問題,通常問題會從該主題的一些基本概念開始,然後根據進一步的討論以及您的回答繼續進行 -

XML 代表可擴充套件標記語言。

以下是 XML 提供的優勢 -

  • 技術無關 - 作為純文字,XML 與技術無關。任何技術都可以將其用於資料儲存和傳輸目的。

  • 人類可讀- XML 使用簡單的文字格式。它是人類可讀和可理解的。

  • 可擴充套件 - 在 XML 中,可以非常輕鬆地建立和使用自定義標籤。

  • 允許驗證 - 使用 XSD、DTD 和 XML 結構可以輕鬆驗證。

以下是使用 XML 的缺點 -

  • 冗餘語法 - 通常 XML 檔案包含大量重複的術語。

  • 冗長- 作為一種冗長的語言,XML 檔案的大小增加了傳輸和儲存成本。

解析 XML 指的是遍歷 XML 文件以訪問資料或以某種方式修改資料。

XML 解析器提供了一種訪問或修改 XML 文件中存在的資料的方法。Java 提供了多種解析 XML 文件的選項。

以下是各種型別的解析器,通常用於解析 XML 文件 -

  • Dom 解析器 - 透過載入文件的完整內容並在記憶體中建立其完整的層次結構樹來解析文件。

  • SAX 解析器 - 基於事件觸發器解析文件。不會將整個文件載入到記憶體中。

  • JDOM 解析器 - 以類似於 DOM 解析器的方式解析文件,但更簡單。

  • StAX 解析器 - 以類似於 SAX 解析器的方式解析文件,但效率更高。

  • XPath 解析器 - 基於表示式解析 XML,並廣泛與 XSLT 結合使用。

  • DOM4J 解析器 - 一個使用 Java 集合框架解析 XML、XPath 和 XSLT 的 Java 庫,提供對 DOM、SAX 和 JAXP 的支援。

DOM 代表文件物件模型。

DOM 代表文件物件模型,它是全球資訊網聯盟 (W3C) 的一項正式建議。它定義了一個介面,使程式能夠訪問和更新 XML 文件的樣式、結構和內容。支援 DOM 的 XML 解析器實現了該介面。

您應該在以下情況下使用 DOM 解析器 -

  • 您需要了解有關文件結構的很多資訊

  • 您需要移動文件的某些部分(例如,您可能希望對某些元素進行排序)

  • 您需要多次使用文件中的資訊

當您使用 DOM 解析器解析 XML 文件時,您會得到一個包含文件所有元素的樹結構。DOM 提供了各種功能,您可以使用這些功能來檢查文件的內容和結構。

DOM 是一個用於操作文件結構的通用介面。其設計目標之一是為一個 DOM 相容解析器編寫的 Java 程式碼應該可以在任何其他 DOM 相容解析器上執行而無需更改。

DOM 定義了幾個 Java 介面。以下是最常見的介面 -

  • 節點 - DOM 的基本資料型別。

  • 元素 - 您將處理的大多數物件都是元素。

  • 屬性 表示元素的屬性。

  • 文字 元素或屬性的實際內容。

  • 文件 表示整個 XML 文件。文件物件通常稱為 DOM 樹。

當您使用 DOM 時,有一些方法您會經常使用 -

  • Document.getDocumentElement() - 返回文件的根元素。

  • Node.getFirstChild() - 返回給定節點的第一個子節點。

  • Node.getLastChild() - 返回給定節點的最後一個子節點。

  • Node.getNextSibling() - 這些方法返回給定節點的下一個兄弟節點。

  • Node.getPreviousSibling() - 這些方法返回給定節點的上一個兄弟節點。

  • Node.getAttribute(attrName) - 對於給定的節點,返回具有請求名稱的屬性。

是的!使用 DOM 解析器,我們可以解析、修改或建立 XML 文件。

SAX 代表 XML 的簡單 API。

SAX 解析器是 xml 文件的基於事件的解析器。

SAX(XML 的簡單 API)是 xml 文件的基於事件的解析器。與 DOM 解析器不同,SAX 解析器不會建立解析樹。SAX 是 XML 的流式介面,這意味著使用 SAX 的應用程式會收到有關正在處理的 XML 文件的事件通知,一次一個元素和屬性,按順序從文件頂部開始,並在 ROOT 元素關閉時結束。

您應該在以下情況下使用 SAX 解析器 -

  • 您可以從上到下以線性方式處理 XML 文件

  • 文件巢狀不深

  • 您正在處理一個非常大的 XML 文件,其 DOM 樹會消耗過多的記憶體。典型的 DOM 實現使用十個位元組的記憶體來表示一個位元組的 XML

  • 要解決的問題僅涉及 XML 文件的一部分

  • 資料在解析器看到後立即可用,因此 SAX 非常適合透過流到達的 XML 文件

  • 我們無法隨機訪問 XML 文件,因為它以單向方式處理

  • 如果您需要跟蹤解析器已檢視的資料或更改專案的順序,則必須自己編寫程式碼並存儲資料

ContentHandler 介面指定了 SAX 解析器用於通知應用程式程式其已檢視的 XML 文件元件的回撥方法。

  • void startDocument() - 在文件開始時呼叫。

  • void endDocument() - 在文件結束時呼叫。

  • void startElement(String uri, String localName, String qName, Attributes atts) - 在元素開始時呼叫。

  • void endElement(String uri, String localName,String qName) - 在元素結束時呼叫。

  • void characters(char[] ch, int start, int length) - 遇到字元資料時呼叫。

  • void ignorableWhitespace( char[] ch, int start, int length) - 當存在 DTD 並遇到可忽略的空格時呼叫。

  • void processingInstruction(String target, String data) - 識別處理指令時呼叫。

  • void setDocumentLocator(Locator locator)) - 提供一個 Locator,可用於識別文件中的位置。

  • void skippedEntity(String name) - 遇到未解析的實體時呼叫。

  • void startPrefixMapping(String prefix, String uri) - 定義新的名稱空間對映時呼叫。

  • void endPrefixMapping(String prefix) - 名稱空間定義結束其範圍時呼叫。

Attributes 介面指定了處理與元素關聯的屬性的方法。

  • int getLength() - 返回屬性數量。

  • String getQName(int index)

  • String getValue(int index)

  • String getValue(String qname)

不可以!使用 SAX 解析器,我們只能解析或修改 XML 文件。

JDOM 是一個開源的基於 Java 的庫,用於解析 XML 文件,它通常是 Java 開發人員友好的 API。

它是 Java 最佳化的,它使用 Java 集合,如列表和陣列。它與 DOM 和 SAX API 一起工作,並結合了兩者的優點。它佔用記憶體少,速度幾乎與 SAX 一樣快。

您應該在以下情況下使用 JDOM 解析器 -

  • 您需要了解有關文件結構的很多資訊。

  • 您需要移動文件的某些部分(例如,您可能希望對某些元素進行排序)。

  • 您需要多次使用文件中的資訊。

  • 您是 Java 開發人員,並希望利用 Java 最佳化的 XML 解析。

當您使用 JDOM 解析器解析 XML 文件時,您可以靈活地獲取一個包含文件所有元素的樹結構,而不會影響應用程式的記憶體佔用。如果文件結構良好且結構已知,則 JDOM 提供各種實用程式函式,可用於檢查文件的內容和結構。

JDOM 使 Java 開發人員能夠靈活且易於維護 XML 解析程式碼。它是一個輕量級且快速的 API。

JDOM 定義了幾個 Java 類。以下是最常見的類:

  • Document - 表示整個 XML 文件。Document 物件通常稱為 DOM 樹。

  • Element - 表示 XML 元素。Element 物件具有用於操作其子元素、文字、屬性和名稱空間的方法。

  • Attribute 表示元素的屬性。Attribute 具有獲取和設定屬性值的方法。它有父級和屬性型別。

  • Text 表示 XML 標籤的文字。

  • Comment 表示 XML 文件中的註釋。

當您使用 JDOM 時,有一些方法您會經常用到:

  • SAXBuilder.build(xmlSource) - 從 xml 源構建 JDOM 文件。

  • Document.getRootElement() - 獲取 XML 的根元素。

  • Element.getName() - 獲取 XML 節點的名稱。

  • Element.getChildren() - 獲取元素的所有直接子節點。

  • Node.getChildren(Name) - 獲取具有給定名稱的所有直接子節點。

  • Node.getChild(Name) - 獲取具有給定名稱的第一個子節點。

是的!使用 JDOM 解析器,我們可以解析、修改和建立 XML 文件。

StAX 是一個基於 JAVA 的 API,用於以類似於 SAX 解析器的方式解析 XML 文件,但 StAX 是一個拉取 API,而 SAX 是一個推送 API。這意味著在 StAX 解析器的情況下,客戶端應用程式需要在需要時請求 StAX 解析器從 XML 獲取資訊,但在 SAX 解析器的情況下,客戶端應用程式需要在 SAX 解析器通知客戶端應用程式資訊可用時獲取資訊。

是的!使用 StAX 解析器,我們可以解析、修改和建立 XML 文件。

是的!StAX 是一個拉取 API。

您應該在以下情況下使用 StAX 解析器:

  • 您可以從上到下以線性方式處理 XML 文件。

  • 文件巢狀不深。

  • 您正在處理一個非常大的 XML 文件,其 DOM 樹會消耗過多的記憶體。典型的 DOM 實現使用 10 個位元組的記憶體來表示 1 個位元組的 XML。

  • 要解決的問題僅涉及 XML 文件的一部分。

  • 資料在解析器看到後即可獲得,因此 StAX 非常適合透過流傳輸的 XML 文件。

  • 我們無法隨機訪問 XML 文件,因為它以單向方式處理

  • 如果您需要跟蹤解析器已檢視的資料或更改專案的順序,則必須自己編寫程式碼並存儲資料

此類提供事件的迭代器,可用於在解析 XML 文件時迭代發生的事件。

  • StartElement asStartElement() - 用於檢索元素的值和屬性。

  • EndElement asEndElement() - 在元素末尾呼叫。

  • Characters asCharacters() - 可用於獲取字元,例如 CDATA、空格等。

此介面指定用於建立事件的方法。

  • add(Event event) - 新增包含元素的事件到 XML。

此類提供事件的迭代器,可用於在解析 XML 文件時迭代發生的事件。

  • int next() - 用於檢索下一個事件。

  • boolean hasNext() - 用於檢查是否存在更多事件。

  • String getText() - 用於獲取元素的文字。

  • String getLocalName() - 用於獲取元素的名稱。

此介面指定用於建立事件的方法。

  • writeStartElement(String localName) - 新增給定名稱的起始元素。

  • writeEndElement(String localName) - 新增給定名稱的結束元素。

  • writeAttribute(String localName, String value) - 將屬性寫入元素。

XPath 是全球資訊網聯盟 (W3C) 的一項正式建議。它定義了一種在 XML 檔案中查詢資訊的語言。它用於遍歷 XML 文件的元素和屬性。XPath 提供各種型別的表示式,可用於從 XML 文件中查詢相關資訊。

以下是 XPath 的關鍵組成部分:

  • 結構定義 - XPath 定義 XML 文件的部分,如元素、屬性、文字、名稱空間、處理指令、註釋和文件節點。

  • 路徑表示式 XPath 提供強大的路徑表示式來選擇 XML 文件中的節點或節點列表。

  • 標準函式 XPath 提供豐富的標準函式庫,用於操作字串值、數值、日期和時間比較、節點和 QName 操作、序列操作、布林值等。

  • XSLT 的主要部分 XPath 是 XSLT 標準的主要元素之一,並且必須瞭解才能使用 XSLT 文件。

  • W3C 建議 XPath 是全球資訊網聯盟 (W3C) 的正式建議。

謂詞用於查詢特定節點或包含特定值的節點,並使用 [...] 定義。

表示式結果
/class/student[1]選擇作為 class 元素子元素的第一個 student 元素。
/class/student[last()]選擇作為 class 元素子元素的最後一個 student 元素。
/class/student[last()-1]選擇作為 class 元素子元素的倒數第二個 student 元素。
//student[@rollno='493']選擇所有具有名為 rollno 的屬性且值為 '493' 的 student 元素。

XPath 使用路徑表示式從 xml 文件中選擇節點或節點列表。以下是用於從 xml 文件中選擇任何節點/節點列表的有用路徑和表示式的列表。

表示式描述
節點名稱選擇所有具有給定名稱“節點名稱”的節點
/選擇從根節點開始
//選擇從與選擇匹配的當前節點開始
.選擇當前節點
..選擇當前節點的父節點
@選擇屬性
學生示例 - 選擇所有名為“學生”的節點
class/student示例:選擇作為 class 子元素的所有 student 元素
//student選擇所有 student 元素,無論它們在文件中的什麼位置。

不能!XPath 解析器僅用於導航 XML 文件。最好使用 DOM 解析器來建立 XML。

DOM4J 是一個開源的、基於 Java 的庫,用於解析 XML 文件,它是一個非常靈活、高效能且記憶體高效的 API。它是 Java 最佳化的,它使用 Java 集合,如 List 和 Arrays。它與 DOM、SAX、XPath 和 XSLT 一起工作。它可以解析大型 XML 文件,並且記憶體佔用非常低。

您應該在以下情況下使用 DOM4J 解析器:

  • 您需要了解有關文件結構的很多資訊

  • 您需要移動文件的某些部分(例如,您可能希望對某些元素進行排序)

  • 您需要多次使用文件中的資訊

  • 您是 Java 開發人員,並希望利用 Java 最佳化的 XML 解析。

當您使用 DOM4J 解析器解析 XML 文件時,您可以靈活地獲取一個包含文件所有元素的樹結構,而不會影響應用程式的記憶體佔用。DOM4J 提供各種實用程式函式,可用於檢查文件的內容和結構,如果文件結構良好且結構已知。DOM4J 使用 XPath 表示式在 XML 文件中導航。

DOM4J 使 Java 開發人員能夠靈活且易於維護 XML 解析程式碼。它是一個輕量級且快速的 API。

DOM4J 定義了幾個 Java 類。以下是最常見的類:

  • Document - 表示整個 XML 文件。Document 物件通常稱為 DOM 樹。

  • Element - 表示 XML 元素。Element 物件具有用於操作其子元素、文字、屬性和名稱空間的方法。

  • Attribute 表示元素的屬性。Attribute 具有獲取和設定屬性值的方法。它有父級和屬性型別。

  • Node 表示 Element、Attribute 或 ProcessingInstruction

當您使用 DOM4J 時,有一些方法您會經常用到:

  • SAXReader.read(xmlSource)() - 從 xml 源構建 DOM4J 文件。

  • Document.getRootElement() - 獲取 XML 的根元素。

  • Element.node(index) - 獲取元素中特定索引處的 XML 節點。

  • Element.attributes() - 獲取元素的所有屬性。

  • Node.valueOf(@Name) - 獲取元素中具有給定名稱的屬性的值。

是的!使用 DOM4J 解析器,我們可以解析、修改和建立 XML 文件。

接下來是什麼?

接下來您可以回顧您之前完成的與主題相關的作業,並確保您能夠自信地談論它們。如果您是應屆畢業生,面試官不會期望您回答非常複雜的問題,而是您必須使自己的基礎概念非常紮實。

其次,如果您無法回答一些問題,實際上並不重要,重要的是,無論您回答了什麼,都必須自信地回答。所以在面試過程中要充滿自信。Tutorialspoint 祝您面試順利,並祝您未來的工作一切順利。乾杯! :-)

java_xml_questions_answers.htm
廣告