Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用xpath而不是XSD对象生成来访问XML详细信息?_Java_Xml_Xpath_Xsd - Fatal编程技术网

Java 使用xpath而不是XSD对象生成来访问XML详细信息?

Java 使用xpath而不是XSD对象生成来访问XML详细信息?,java,xml,xpath,xsd,Java,Xml,Xpath,Xsd,我想解析服务器上托管的一个XML文件。通常我从XML生成一个XSD,然后从这个XSD生成JavaPOJO。然后使用jackson将XML解析为java对象表示。仅仅使用xpath不是更简单吗?这意味着我不需要基于XML生成对象层次结构,而且如果XML发生更改,我也不需要重新生成对象层次结构。xpath看起来更加简洁和直观 为什么我应该使用XSD,对象生成而不是xpath?根据规范,XSD用于定义XML文档的结构、内容和语义。这意味着您可以使用XSD来验证XML文件 如果您只需要从XML文件中获取

我想解析服务器上托管的一个XML文件。通常我从XML生成一个XSD,然后从这个XSD生成JavaPOJO。然后使用jackson将XML解析为java对象表示。仅仅使用xpath不是更简单吗?这意味着我不需要基于XML生成对象层次结构,而且如果XML发生更改,我也不需要重新生成对象层次结构。xpath看起来更加简洁和直观

为什么我应该使用XSD,对象生成而不是xpath?

根据规范,XSD用于定义XML文档的结构、内容和语义。这意味着您可以使用XSD来验证XML文件


如果您只需要从XML文件中获取一些值,则可能不需要生成整个对象树,这取决于您的环境。在本例中,XPath是一种方法。但是,您可能仍然需要一个XSD文件,以便在解析XML文件之前对其进行验证。这样,当XML文件的结构发生变化时,您可以制作软件,这将建议您更改XPath表达式。但是为了实现这一点,您不应该使用从XML文件生成的XSD,而是应该有一个单独的预生成XSD文件,该文件符合XPath表达式。

我认为这两种方法都是有效的,具体取决于具体情况。 最后,您需要从远程xml文件中提取值,并对其进行处理

要考虑的第一个标准是该文件的大小和数据元素的数目。 如果只是几个,那么xpath提取应该很简单。但是,如果该xml文件表示一个相当大和/或复杂的数据结构,那么您可能希望将反序列化转换为一个Java数据结构,然后您就可以利用它,JAXB将是一个很好的候选者

如果远程服务器坚持或发布XML模式,JAXB将变得更容易/更好。如果不这样做,并且经常发生显著的变化,那么无论哪种情况,您都会受到影响,尤其是JAXB。有一些方法可以通过使用XSLT对xml进行预处理,使其变成更可靠的形式,从而使事情变得更加顺利,但这很可能是一种局部解决方案