2017-11-06 3 views
0

특정 노드에서 데이터를 추출하기 위해 XML 구문 분석에 문제가 있습니다. 내가 참조한 Link1Link2Link3.XML Parse - 특정 노드의 텍스트 구문 분석 문제

<trade segment_id="NSE-F&amp;O " instrument_id="NSE:INFRATEL17NOVFUT"> 

:주의, SEGMENT_ID & INSTRUMENT_ID의 정보를 추출 할 수없는, &는 아래의 XML ID로 파일 ORDER_ID 등에서 그러나 아래 라인/노드의 다른 노드에 대한 데이터를 얻을 구문 분석 할 수 있어요 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

귀하의 의견에 혼란스러워 : * Notice *? 고쳐주지 않았 니? * 추정 *? 재시험하지 않니? – kjhughes

+0

혼란을 가져 주어서 죄송합니다. 나는 segment_id = "NSE-F & O"로 보여주는 IE에서 XML을 열었습니다. 그러나 메모장에서 동일한 XML을 열면 segment_id = "NSE-F & O"로 표시됩니다. XML 파일을 변경하지 않았습니다. 그러나 구문 분석하려고 할 때 해당 데이터를 읽을 수 없습니다. 내가하고있는 다른 실수? – iCoder