Java XML 面试问题(Interview Questions)
亲爱的读者们,这些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 ?)
此外,您可以查看您对该主题所做的过去作业,并确保您能够自信地说出这些作业。 如果你更新鲜,那么面试官不会指望你会回答非常复杂的问题,而是你必须使你的基本概念非常强大。