XML Parse - 解析来自特定节点

时间:2017-11-06 13:03:18

标签: java xml parsing xml-parsing

在解析XML以从特定节点提取数据时遇到问题。我提到Link1 Link2 Link3。请注意,我能够解析&获取下面的xml文件中的其他节点的数据,如id,order_id等。但对于下面的行/节点,无法提取segment_id&的信息。 INSTRUMENT_ID:

<trade segment_id="NSE-F&amp;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&amp;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文件信息。

1 个答案:

答案 0 :(得分:1)

作为@Juan commented,您的XML很糟糕。按照required XML escaping rules并将segment_id="NSE-F&O "替换为segment_id="NSE-F&amp;O "来修复此问题。

如果您无法更改XML,请参阅 How to parse invalid (bad / not well-formed) XML? 以获取选项,但最佳选择是在源处修复XML。