当前位置: 首页 > 文档资料 > Java XML 中文文档 >

Java XML 面试问题(Interview Questions)

优质
小牛编辑
122浏览
2023-12-01

亲爱的读者们,这些JAVA based XML Parsing Interview Questions专门设计用于让您熟悉在面试JAVA based XML Parsing时可能遇到的问题的本质。 根据我的经验,很好的面试官在你的面试中几乎不打算问任何特定的问题,通常问题从这个主题的一些基本概念开始,然后他们继续基于进一步的讨论和你回答的问题 -

XML代表可扩展标记语言。

以下是XML提供的优势 -

  • Technology agnostic - 作为纯文本,XML与技术无关。 它可以被任何技术用于数据存储和传输目的。

  • Human readable - XML使用简单的文本格式。 它是人类可读和可理解的。

  • Extensible - 在XML中,可以非常轻松地创建和使用自定义标签。

  • Allow Validation - 使用XSD,DTD和XML结构可以轻松验证。

以下是XML使用的缺点 -

  • Redundant Syntax - 通常XML文件包含许多重复性术语。

  • Verbose - 使用冗长的语言,XML文件大小会增加传输和存储成本。

解析XML是指通过XML文档访问数据或以一种或另一种方式修改数据。

XML Parser提供了如何访问或修改XML文档中存在的数据的方法。 Java提供了多种解析XML文档的选项。

以下是通常用于解析XML文档的各种类型的解析器 -

  • Dom Parser - 通过加载文档的完整内容并在内存中创建完整的层次树来解析文档。

  • SAX Parser - 在基于事件的触发器上解析文档。 不将完整文档加载到内存中。

  • JDOM Parser - 以类似于DOM解析器的方式解析文档,但更简单。

  • StAX Parser - 以类似于SAX解析器的方式解析文档,但更有效。

  • XPath Parser - 基于表达式解析XML,并与XSLT结合使用。

  • DOM4J Parser - 使用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 Element或Attr的实际内容。

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

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

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

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

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

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

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

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

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

SAX代表Simple API for XML。

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

SAX(Simple API for XML)是一个基于事件的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 Interface指定处理连接到元素的属性的方法。

  • 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表示元素的属性。 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实现使用10个字节的内存来表示XML的一个字节。

  • 要解决的问题仅涉及XML文档的一部分。

  • 解析器一看到数据就会立即可用,因此StAX适用于通过流到达的XML文档。

  • 我们没有随机访问XML文档,因为它是以仅向前的方式处理的

  • 如果您需要跟踪解析器已经看到的数据或更改项目的顺序,您必须编写代码并将数据存储在您自己的

此类提供事件的迭代器,可用于在解析XML文档时对事件进行迭代。

  • StartElement asStartElement() - 用于检索元素的值和属性。

  • EndElement asEndElement() - 在元素的末尾调用。

  • Characters asCharacters() - 可用于获取CDATA,空格等字符。

此接口指定用于创建事件的方法。

  • add(Event event) - 将包含元素的add(Event event)添加到XML。

此类提供事件的迭代器,可用于在解析XML文档时对事件进行迭代

  • int next() - 用于检索下一个事件。

  • boolean hasNext() - 用于检查是否存在其他事件

  • String getText() - 用于获取元素的文本

  • String getLocalName() - 用于获取元素的名称

此接口指定用于创建事件的方法。

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

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

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

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

以下是XPath的关键组件 -

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

  • Path Expressions XPath提供了强大的路径表达式,用于选择XML文档中的节点或节点列表。

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

  • Major part of XSLT XPath的主要部分是XSLT标准中的主要元素之一,并且必须具备处理XSLT文档的知识。

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

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

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

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

表达描述
node-name选择具有给定名称“nodename”的所有节点
/选择从根节点开始
//选择从与选择匹配的当前节点开始
.选择当前节点
..选择当前节点的父节点
@选择属性
student示例 - 选择名为“student”的所有节点
class/student示例:选择作为类的子项的所有学生元素
//student选择所有学生元素,无论他们在文档中的位置

没有! XPath解析器仅用于导航XML Document。 最好使用DOM解析器来创建XML。

DOM4J是一个基于Java的开源库,用于解析XML文档,它是高度灵活,高性能和内存高效的API。 它是java优化的,它使用像List和Arrays这样的java集合。 它适用于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文档。

接下来是什么? (What is Next ?)

此外,您可以查看您对该主题所做的过去作业,并确保您能够自信地说出这些作业。 如果你更新鲜,那么面试官不会指望你会回答非常复杂的问题,而是你必须使你的基本概念非常强大。