【问题标题】:Less cumbersome way to parse XML attributes with nested tags使用嵌套标签解析 XML 属性的简便方法
【发布时间】:2016-07-24 21:04:58
【问题描述】:

我目前正在尝试解析带有棒球比分的 XML 文件。该文件将所有信息存储在属性中,这给我带来了一些麻烦。这是设置的示例。

<game id="2016/07/20/atlmlb-cinmlb-1" venue="Great American Ball Park">
    <linescore>
         <inning away="1" home="0"/>
         <r away="3" home="6" diff="3"/>
         <h away="9" home="12"/>
    </linescore>
    <winning_pitcher id="543101" last="test" first="bob">
    <losing_pitcher id="449173" last="test" first="joe">
 </game>

到目前为止我所拥有的是:

NamedNodeMap ga= game.getAttributes();
Node stadium = ga.getNamedItem("venue");
String stad = stadium.getNodeValue();

NodeList linescore = game.getChildNodes();
NamedNodeMap ls = linescore.item(3).getAttributes();
....

如果所有内容都存储在游戏属性中,这会很好,但由于其中很多是嵌套的,因此必须为子属性创建节点列表,然后再重复一遍,特别是当我尝试时,这变得很麻烦获取 20-30 个统计数据。有没有更简单的说法,从&lt;r&gt; 获取主场比分,获胜投手名字和失败投手名字。

【问题讨论】:

    标签: java xml dom


    【解决方案1】:

    XPath 让 XML 访问变得不那么麻烦:

    有没有更简单的说法,从&lt;r&gt;获取首页分数

    /game/linescore/r/@home
    

    获胜投手的名字

    /game/winning_pitcher/@first
    

    失去投手的名字

    /game/losing_pitcher/@first
    

    将上述 XPath 与 How to read XML using XPath in Java 结合使用。

    【讨论】:

    • 太好了,我去看看。
    • 这就像一个魅力。感谢您的建议。
    【解决方案2】:

    您可以尝试 Jackson 对 XML 的扩展:https://github.com/FasterXML/jackson-dataformat-xml,它允许您将 XML 序列化/反序列化为 POJO

    【讨论】:

    • 我最终选择了 XPATH 来完成我必须做的事情,但感谢您的建议。如果我使用 JSON,我可能会尝试使用 Jacksons,因为它似乎是最好的。
    猜你喜欢
    • 2011-09-24
    • 2012-01-05
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多