解析标签名称不固定的XML

解析标签名称不固定的XML

问题描述:

解析标签名称固定的XML很容易。在XStream中,我们可以简单地使用@XStreamAlias("tagname")注释。但是如何解析标签名称不固定的XML。假设我有以下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> 

标记名称AmericaSpain是不固定的,有时候我可能会像德国,印度等其他标记名称

如何在这种情况下定义为POJO标签result2 ?有没有办法告诉XStream接受什么作为别名,如果标签名称是事先不知道的?

+3

在这种情况下的标签名称应该确实是国家。这只是愚蠢的。 (我不是说这是你的错) –

+0

是的。我从另一方得到这个。所以不能改变它。 –

+0

当然你可以改变它,写入xslt转换为更疯狂的东西。 –

,如果它是确定你获得从标签本身内部的标签(场“名”),使用XPath,你可以这样做:

//result2/*/name/text() 

另一种选择是使用整个元素,像:

//result2/* 

,或者也:

//result2/*/name() 
+0

你能解释更多或者一些代码片段吗? –

+0

刚刚阅读:https://*.com/questions/2811001/how-to-read-xml-using-xpath-in-java和规则,在这里简短地解释:https://www.freeformatter.com/ xpath-tester.html在这最后一个链接中,你也可以评估你的模式 – marco

一些技术(具体地,数据绑定方法)是为优化处理XML的结构在编译时已知。其他(如DOM和其他类似DOM的树模型 - JDOM,XOM等)是专为处理其结构未知的XML而设计的。使用该工具进行这项工作。

XSLT和XQuery试图融合两者。在他们的模式感知形式中,他们可以在可用时利用静态结构信息。但更通常的是,它们以“无类型”模式运行,没有关于元素名称或结构的先验知识,并且所有事情都按照它的处理方式进行处理。基于XSLT规则的处理范例特别适合于内容不可预测或可变的“半结构化”XML。