2016-07-24 60 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