Java 使用xpath而不是XSD对象生成来访问XML详细信息?
我想解析服务器上托管的一个XML文件。通常我从XML生成一个XSD,然后从这个XSD生成JavaPOJO。然后使用jackson将XML解析为java对象表示。仅仅使用xpath不是更简单吗?这意味着我不需要基于XML生成对象层次结构,而且如果XML发生更改,我也不需要重新生成对象层次结构。xpath看起来更加简洁和直观 为什么我应该使用XSD,对象生成而不是xpath?根据规范,XSD用于定义XML文档的结构、内容和语义。这意味着您可以使用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文件中获取一些值,则可能不需要生成整个对象树,这取决于您的环境。在本例中,XPath是一种方法。但是,您可能仍然需要一个XSD文件,以便在解析XML文件之前对其进行验证。这样,当XML文件的结构发生变化时,您可以制作软件,这将建议您更改XPath表达式。但是为了实现这一点,您不应该使用从XML文件生成的XSD,而是应该有一个单独的预生成XSD文件,该文件符合XPath表达式。我认为这两种方法都是有效的,具体取决于具体情况。 最后,您需要从远程xml文件中提取值,并对其进行处理
要考虑的第一个标准是该文件的大小和数据元素的数目。 如果只是几个,那么xpath提取应该很简单。但是,如果该xml文件表示一个相当大和/或复杂的数据结构,那么您可能希望将反序列化转换为一个Java数据结构,然后您就可以利用它,JAXB将是一个很好的候选者
如果远程服务器坚持或发布XML模式,JAXB将变得更容易/更好。如果不这样做,并且经常发生显著的变化,那么无论哪种情况,您都会受到影响,尤其是JAXB。有一些方法可以通过使用XSLT对xml进行预处理,使其变成更可靠的形式,从而使事情变得更加顺利,但这很可能是一种局部解决方案