2017-11-06 15 views
0

特定のノードからデータを抽出するためにXMLを解析する際に問題に直面しています。私はLink1Link2Link3を参照しました。注意&にid、ORDER_IDなどのように、以下のxmlファイル内の他のノードのデータを取得する解析できています。しかし、以下のライン/ノードに対して、segment_idに& INSTRUMENT_IDの情報を抽出することができませんでしください:XML解析 - 特定のノードからテキストを解析する際の問題

<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

&文字は問題を引き起こしているものです。それはエスケープする必要があります。 – Juan

+1

OPの前後でやりとりされた後、本当の疑問は基本的な「JavaでXML属性値を読むにはどうすればよいですか」という質問が出ます。重複して閉じる。 – kjhughes

+0

あなたが引用したスレッドを検索していないため、ありがとうございました。 – iCoder

答えて

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をソースで修正することをお勧めします。

+0

ありがとうございました、今メモ帳でxmlを開いて&segment_id = "NSE-F & O"のように気付くので、ファイルは大丈夫です。 – iCoder

+0

あなたのコメントで混乱しました:*通知*?あなたはそれを修正しませんでしたか? *推定する*? 再テストしませんか? – kjhughes

+0

混乱して申し訳ありません。私はsegment_id = "NSE-F&O"と表示されているIEでXMLを開いていました。しかし、メモ帳で同じXMLを開くと、segment_id = "NSE-F & O"と表示されます。私はXMLファイルを変更していません。しかし、私が解析しようとすると、そのデータを読むことができません。私がやっている間違い? – iCoder