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
广告