在java中使用Dom的xml解析
问题描述:
如何以此格式打印此xml文件:在java中使用Dom的xml解析
GMSports |类别|锦标赛| TeamAName - TeamBName:TeamAScore - TeamBScore
<?xml version="1.0" encoding="UTF-8"?>
<Data>
<GMSport SportId="1">
<Name language="en">Soccer</Name>
<Category CategoryId="34">
<Name language="en">Australia</Name>
<Tournament TournamentId="144">
<Name language="en">Hyundai A-League</Name>
<Match MatchId="4616735">
<MatchDate>2011-01-05T07:30:00</MatchDate>
<TeamA TeamId="1029369">
<Name language="en">Wellington Phoenix FC</Name>
</TeamA>
<TeamB TeamId="529088">
<Name language="en">Melbourne Victory</Name>
</TeamB>
<Status Code="0">
<Name language="en">Not started</Name>
</Status>
<Winner>0</Winner>
</Match>
</Tournament>
</Category>
</GMSport>
</Data>
这里我想
public static void main(String[] args) {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = null;
try {
docBuilder = factory.newDocumentBuilder();
} catch (ParserConfigurationException ex) {
Logger.getLogger(DomeParser.class.getName()).log(Level.SEVERE, null, ex);
}
Document doc = docBuilder.parse (new File("test.xml"));
NodeList list = doc.getElementsByTagName("*");
for (int i = 0; i < list.getLength(); i++) {
Element element = (Element) list.item(i);
String nodeName = element.getNodeName();
if (nodeName.equals("GMSport")) {
System.out.print(nodeName+"|");
}
else if (nodeName.equals("Category")) {
System.out.print(nodeName+"|");
}
else if (nodeName.equals("Tournament")) {
System.out.print(nodeName+"|");
}
}
} catch (SAXException ex) {
Logger.getLogger(DomeParser.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(DomeParser.class.getName()).log(Level.SEVERE, null, ex);
}
}
答
- 创建像体育,类别,比赛等
- 适当的领域类从XML创建领域类(您可以像当前那样使用JAXB或原始DOM)
- 一旦建立了域类,就可以使用它们以任何您想要的方式打印它。
在您当前的代码中,您将解析和报告/打印逻辑混合为一个不能缩放的逻辑。
实际输出与您的期望值有什么不同? – maerics