在解析XML以从特定节点提取数据时遇到问题。我提到Link1 Link2 Link3。请注意,我能够解析&获取下面的xml文件中的其他节点的数据,如id,order_id等。但对于下面的行/节点,无法提取segment_id&的信息。 INSTRUMENT_ID:
<trade segment_id="NSE-F&O " instrument_id="NSE:INFRATEL17NOVFUT">
不确定XML文件的设置方式或我尝试为该特定节点提取数据的方式是错误的。希望我面临的具体问题是明确的。
XML文件:
<contract_note version="0.1">
<contracts>
<contract>
<id>CNT-17/18-5310750</id>
<name>CONTRACT NOTE CUM BILL</name>
<description>None</description>
<timestamp>2017-11-01</timestamp>
<trades>
<trade segment_id="NSE-F&O " instrument_id="NSE:INFRATEL17NOVFUT">
<id>37513030</id>
<order_id>1300000000352370</order_id>
<timestamp>09:20:48</timestamp>
<description>None</description>
<type>buy</type>
<quantity>1700</quantity>
<average_price>444.2</average_price>
<value>755140.0</value>
</trade>
</trades>
</contract>
</contracts>
</contract_note>
代码:
try {
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(xmlFile);
NodeList cNoteList = doc.getElementsByTagName("contract");
Node nNode = cNoteList.item(0);
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
for (int j = 1; j <= eElement.getElementsByTagName("trade").getLength(); j++) {
// Check if data can be read for Node - 'id'
System.out.println(eElement.getElementsByTagName("id").item(j).getTextContent();
// Check if data can be read for segment_id & instrument_id
System.out.println("Scrip: " + eElement.getElementsByTagName("trade").item(0).getTextContent());
}
}catch (Exception e) {
e.printStackTrace();
}
修改 更正了上面提供的xml文件信息。
答案 0 :(得分:1)
作为@Juan commented,您的XML很糟糕。按照required XML escaping rules并将segment_id="NSE-F&O "
替换为segment_id="NSE-F&O "
来修复此问题。
如果您无法更改XML,请参阅 How to parse invalid (bad / not well-formed) XML? 以获取选项,但最佳选择是在源处修复XML。