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 Collections Framework 解析 XML、XPath 和 XSLT 的 java 库,提供对 DOM、SAX 和 JAXP 的支持。

DOM 代表文档对象模型。

DOM 代表文档对象模型,它是万维网联盟 (W3C) 的官方推荐。 它定义了一个接口,使程序能够访问和更新 XML 文档的样式、结构和内容。 支持 DOM 的 XML 解析器实现了该接口。

你应该使用 DOM 解析器 −

  • 你需要对文档的结构有很多了解

  • 您需要移动文档的某些部分(例如,您可能想要对某些元素进行排序)

  • 您需要多次使用文档中的信息

当您使用 DOM 解析器解析 XML 文档时,您会得到一个包含文档所有元素的树结构。 DOM 提供了多种功能,可用于检查文档的内容和结构。

DOM 是用于操作文档结构的通用接口。 它的设计目标之一是为一个符合 DOM 的解析器编写的 Java 代码应该在任何其他符合 DOM 的解析器上运行而无需更改。

DOM 定义了几个 Java 接口。 以下是最常用的接口 −

  • Node - DOM 的基本数据类型。

  • Element - 您将处理的绝大多数对象都是元素。

  • Attr 表示元素的属性。

  • Text元素或属性的实际内容。

  • Document 表示整个 XML 文档。 Document 对象通常被称为 DOM 树。

当您使用 DOM 时,您会经常使用几种方法 −

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

  • Node.getFirstChild() - 返回给定节点的第一个子节点。

  • Node.getLastChild() - 返回给定节点的最后一个子节点。

  • Node.getNextSibling() - 这些方法返回给定节点的下一个兄弟节点。

  • Node.getPreviousSibling() - 这些方法返回给定节点的前一个兄弟节点。

  • Node.getAttribute(attrName) - 对于给定的节点,返回具有请求名称的属性。

是的! 使用 DOM 解析器,我们可以解析、修改或创建 XML 文档。

SAX 代表 XML 的简单 API。

SAX Parser 是一个基于事件的 xml 文档解析器。

SAX(XML 的简单 API)是基于事件的 xml 文档解析器。与 DOM 解析器不同,SAX 解析器不创建解析树。 SAX 是 XML 的流式接口,这意味着使用 SAX 的应用程序接收有关正在处理的 XML 文档的事件通知,一个元素和属性,一次按顺序从文档顶部开始,到结束 根元素。

您应该在以下情况下使用 SAX 解析器 −

  • 您可以从上到下以线性方式处理 XML 文档

  • 文档嵌套不深

  • 您正在处理一个非常大的 XML 文档,其 DOM 树会占用太多内存。典型的 DOM 实现使用 10 个字节的内存来表示一个 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)) - 提供可用于识别文档中位置的定位器。

  • void skippedEntity(String name) - 当遇到未解析的实体时调用。

  • void startPrefixMapping(String prefix, String uri) - 在定义新的命名空间映射时调用。

  • void endPrefixMapping(String prefix) - 当命名空间定义结束其范围时调用。

属性接口指定处理连接到元素的属性的方法。

  • int getLength() - 返回属性的数量。

  • String getQName(int index)

  • String getValue(int index)

  • String getValue(String qname)

不! 使用 SAX 解析器,我们只能解析或修改 XML 文档。

JDOM 是一个开源的、基于 Java 的库,用于解析 XML 文档,它通常是 Java 开发人员友好的 API。

它是 java 优化的,它使用像 List 和 Arrays 这样的 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 - 表示元素的属性。 属性具有获取和设置属性值的方法。 它有父类型和属性类型。

  • 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 是一个 PULL API,而 SAX 是一个 PUSH API。 这意味着在 StAX 解析器的情况下,客户端应用程序需要在需要时要求 StAX 解析器从 XML 获取信息,但在 SAX 解析器的情况下,当 SAX 解析器通知客户端应用程序信息可用时,客户端应用程序需要获取信息。

是的! 使用 StAX 解析器,我们可以解析、修改和创建 XML 文档。

是的! StAX 是一个 PULL API。

您应该在以下情况下使用 StAX 解析器 −

  • 您可以自上而下以线性方式处理 XML 文档。

  • 文档嵌套不深。

  • 您正在处理一个非常大的 XML 文档,其 DOM 树会占用太多内存。 典型的 DOM 实现使用十字节的内存来表示一个字节的 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() - 用于获取元素的名称

This interface specifies methods for creating an event.

  • writeStartElement(String localName) - 添加给定名称的开始元素。

  • writeEndElement(String localName) - 添加给定名称的结束元素。

  • writeAttribute(String localName, String value) - 将属性写入元素。

XPath 是万维网联盟 (W3C) 的官方推荐。 它定义了一种在 XML 文件中查找信息的语言。 它用于遍历 XML 文档的元素和属性。 XPath 提供了各种类型的表达式,可用于从 XML 文档中查询相关信息。

以下是 XPath 的关键组件 −

  • 结构定义 - XPath 定义 XML 文档的各个部分,例如元素、属性、文本、命名空间、处理指令、注释和文档节点。

  • 路径表达式 - XPath 提供强大的路径表达式选择 XML 文档中的节点或节点列表。

  • 标准函数 - XPath 提供了丰富的标准函数库,用于处理字符串值、数值、日期和时间比较、节点和 QName 操作、序列操作、布尔值等。< /p>

  • XSLT 的主要部分 - XPath 是 XSLT 标准中的主要元素之一,必须具备使用 XSLT 文档的知识。

  • W3C 推荐 - XPath 是万维网联盟 (W3C) 的官方推荐。

谓词用于查找特定节点或包含特定值的节点,并使用 [...] 定义。

表达式结果
/class/student[1]选择作为类元素子元素的第一个student元素。
/class/student[last()]选择作为类元素的子元素的最后一个student元素。
/class/student[last()-1]选择作为类元素子元素的最后一个student元素。
//student[@rollno='493']选择具有名为 rollno 且值为 '493' 的属性的所有student元素

XPath 使用路径表达式从 xml 文档中选择节点或节点列表。 以下是从 xml 文档中选择任何节点/节点列表的有用路径和表达式列表。

表达式描述
node-name选择具有给定名称"nodename"的所有节点
/选择从根节点开始
//选择从匹配选择的当前节点开始
.选择当前节点
..选择当前节点的父节点
@选择属性
student示例 − 选择名称为"student"的所有节点
class/student示例:选择作为类的子级的所有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 表示元素的属性。 属性具有获取和设置属性值的方法。 它有父类型和属性类型。

  • Node 代表元素、属性或处理指令

当您使用 DOM4J 时,您会经常使用几种方法 −

  • SAXReader.read(xmlSource)() - 从 xml 源构建 DOM4J 文档。

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

  • Element.node(index) - 获取元素中特定索引处的 XML 节点。

  • Element.attributes() - 获取一个元素的所有属性。

  • Node.valueOf(@Name) - 获取给定元素名称的属性值。

是的! 使用 DOM4J 解析器,我们可以解析、修改和创建 XML 文档。


接下来是什么?

此外,您还可以回顾您过去完成的有关该主题的作业,并确保您能够自信地谈论它们。 如果你是新人,那么面试官不会指望你会回答非常复杂的问题,而是必须让你的基本概念非常扎实。

其次,如果你不能回答几个问题,这真的无关紧要,但重要的是,无论你回答什么,你都必须自信地回答。 所以,在你的面试中保持自信。 我们在tutorialspoint 祝你好运,有一个好的面试官,祝你未来的工作一切顺利。 干杯:-)

❮ Java XML - 问题和答案