Java 解析标记名不固定的XML

Java 解析标记名不固定的XML,java,xml,xml-parsing,xstream,Java,Xml,Xml Parsing,Xstream,解析标记名固定的XML很容易。在XStream中,我们可以简单地使用@xstreamaliastgname注释。但是如何解析标记名不固定的XML。假设我有以下XML: <result> <result1> <fixed1> ... </fixed1> <fixed2> ... </fixed2> </result1> <result2> <item>

解析标记名固定的XML很容易。在XStream中,我们可以简单地使用@xstreamaliastgname注释。但是如何解析标记名不固定的XML。假设我有以下XML:

<result>
  <result1>
     <fixed1> ... </fixed1>
     <fixed2> ... </fixed2>
  </result1>
  <result2>
    <item>
     <America>
         <name> America </name>
         <language> English </language>
     </America>
    </item>
    <item>
     <Spain>
         <name> Spain </name>
         <language> Spanish </language>
     </Spain>
    </item> 
  </result2>
</result>
标签名美国和西班牙是不固定的,有时我可能会得到其他标签名,如德国,印度等


在这种情况下,如何为标记result2定义pojo?如果事先不知道标记名,有没有办法告诉XStream接受任何东西作为别名

如果可以使用Xpath从标记本身字段“name”中获取标记,则可以执行以下操作:

//result2/*/name/text()
另一种选择是使用整个元素,如:

//result2/*
或者:

//result2/*/name()

一些技术,特别是数据绑定方法,针对处理在编译时结构已知的XML进行了优化。其他类似DOM和其他类似DOM的树模型(JDOM、XOM等)是为处理结构未知的XML而设计的。使用该工具进行作业


XSLT和XQuery尝试将两者混合。在模式感知形式中,当静态结构信息可用时,它们可以利用静态结构信息。但更常见的是,它们是在非类型化模式下运行的,在这种模式下,没有元素名称或结构的先验知识,一切都按原样处理。基于XSLT规则的处理范式特别适合于内容不可预测或可变的半结构化XML。

本例中的标记名称应该是country。这太愚蠢了。我不是说这是你的错是的。我从另一个聚会上得到这个。所以不能更改它。当然可以更改它,编写xslt以转换为不那么疯狂的东西。只需阅读以下内容:以及此处简要解释的规则:在最后一个链接中,您还可以评估您的模式