2016-07-24 28 views
1

我目前正在尝试使用棒球分数解析XML文件。该文件将所有信息存储在属性中,这给我一些麻烦。这是一个设置的例子。使用嵌套标签解析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个属性时。有没有更简单的方式来说,从主场得分<r>,获胜的投手名字和丢失投手的名字。

回答

1

的XPath使XML访问麻烦较少:

有没有说,抢主场成绩从<r>

/game/linescore/r/@home 

赢取的投手先命名

一个更简单的方法
/game/winning_pitcher/@first 

,失去投手先命名

/game/losing_pitcher/@first 

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

+0

很好,我会看看那个。 – rinaldo13531

+0

这工作就像一个魅力。感谢您的建议。 – rinaldo13531

1

你可以尝试杰克逊的extention为XML:https://github.com/FasterXML/jackson-dataformat-xml,它可以让你序列化/反序列化XML到POJO的

+0

我最终用XPATH去做我必须做的事情,但是谢谢你的建议。如果我已经完成了JSON,我可能会尝试使用Jacksons,因为它似乎是最好的。 – rinaldo13531