【问题标题】:Parse XML in which tag name is not fixed解析标签名称不固定的 XML
【发布时间】:2018-03-16 22:38:00
【问题描述】:

很容易解析标签名称固定的 XML。在 XStream 中,我们可以简单地使用@XStreamAlias("tagname") 注解。但是如何解析标签名称不固定的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 不固定,有时我可能会得到其他标签名称,例如德国、印度等。

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

【问题讨论】:

  • 这种情况下的标签名应该是国家。这只是愚蠢的。 (我不是说这是你的错)
  • 是的。我从另一方得到这个。所以不能改。
  • 当然你可以改变它,写 xslt 转换成不那么疯狂的东西。

标签: java xml xml-parsing xstream


【解决方案1】:

某些技术(特别是数据绑定方法)针对处理在编译时已知的 XML 结构进行了优化。其他(如 DOM 和其他类似 DOM 的树模型 - JDOM、XOM 等)旨在处理事先不知道其结构的 XML。使用该工具完成工作。

XSLT 和 XQuery 尝试混合两者。在他们的模式感知形式中,他们可以利用可用的静态结构信息。但更常见的是,它们以“无类型”模式运行,其中没有元素名称或结构的先验知识,并且一切都被处理。 XSLT 基于规则的处理范例特别适用于内容不可预测或可变的“半结构化”XML。

【讨论】:

    【解决方案2】:

    如果您可以从标签本身(字段“名称”)中获取标签,使用 Xpath,您可以这样做:

    //result2/*/name/text()
    

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

    //result2/*
    

    也可以:

    //result2/*/name()
    

    【讨论】:

    猜你喜欢
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2015-09-25
    • 1970-01-01
    相关资源
    最近更新 更多