2014-03-27 6 views
0

XML과 비슷한 텍스트 파일을 읽어야합니다. 텍스트 파일은 부모 태그가있는 여러 개의 XML 파일로 이루어져 있습니다. 파일과 행을 구문 분석해야합니다 한 줄에 하나씩 다른 텍스트 파일에 부모 태그 안에 여러 번 반복되는 필수 자식 태그의 해당 요소를 작성해야합니다. 부모 태그 뒤의 다음 줄에 요소를 작성해야합니다. 파일을 읽고 파일을 쓰려면,하지만 그 논리를 요구 사항에 따라 읽을 수는 없습니다. 제발 도와주세요.여러 태그가있는 텍스트 파일을 구문 분석하여 다른 텍스트 파일에 쓰기

<parentnode xmlns="http://www.fpml.org/FpML-5/recordkeeping" fpmlVersion="5-5" xmlns:abcde="http://www.abcde.com/ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.abcde.com/ext /../xmls/XYZ/recordkeeping/abcde-ext.xsd"> 
<Child1 Child1Scheme="http://www.google.com">1234566546</Child1> 
<Child1 Child1Scheme="http://www.fpml.org/coding-scheme/external/UNique">AbcdeXYZ-23243423</Child1> 
<country countryScheme="http://www.fpml.org/coding-scheme/external/country-identifier">1030253498</country> 
<state stateScheme="http://www.fpml.org/coding-scheme/external/state-identifier">23423423423</state> 
</parentnode> 

<parentnode xmlns="http://www.fpml.org/FpML-5/recordkeeping" fpmlVersion="5-5" xmlns:abcde="http://www.abcde.com/ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.abcde.com/ext /../xmls/XYZ/recordkeeping/abcde-ext.xsd"> 
<Child1 Child1Scheme="http://www.google.com">1234566546</Child1> 
<Child1 Child1Scheme="http://www.fpml.org/coding-scheme/external/UNique">AbcdeXYZ-154555</Child1> 
<country countryScheme="http://www.fpml.org/coding-scheme/external/country-identifier">1030253498</country> 
<state stateScheme="http://www.fpml.org/coding-scheme/external/state-identifier">434343242</state> 
</parentnode> 

<parentnode xmlns="http://www.fpml.org/FpML-5/recordkeeping" fpmlVersion="5-5" xmlns:abcde="http://www.abcde.com/ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.abcde.com/ext /../xmls/XYZ/recordkeeping/abcde-ext.xsd"> 
<Child1 Child1Scheme="http://www.google.com">1234566546</Child1> 
<Child1 Child1Scheme="http://www.fpml.org/coding-scheme/external/UNique">AbcdeXYZ-4566545</Child1> 
<country countryScheme="http://www.fpml.org/coding-scheme/external/country-identifier">1030253498</country> 
<state stateScheme="http://www.fpml.org/coding-scheme/external/state-identifier">2323232323</state> 
</parentnode> 
+0

여기서해야 할 일이 많습니다. 더 잘 시작하십시오! 우리에게 당신의 XML 파일이나 컬렉션을 보여주세요. –

+1

샘플 입력 파일을 게시 한 다음 원하는 출력을 게시하는 것이 좋습니다. 나는 OP에서 무엇이든을 이해할 수 없다. – hellboy

+0

StAX를 사용하면 파일을 구문 분석하는 데 도움이 될 수 있습니다. 파일에 루트 요소가 여러 개있을 때 어떻게 작동하는지 잘 모르겠지만 ... – Puce

답변

0

먼저 당신은 당신의 파일 유효한 XML해야 할 :

<?xml version="1.0"?> 
<rootnode> 
    <parentnode xmlns="http://www.fpml.org/FpML-5/recordkeeping" 
     fpmlVersion="5-5" xmlns:abcde="http://www.abcde.com/ext" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://www.abcde.com/ext /../xmls/XYZ/recordkeeping/abcde-ext.xsd"> 
     <Child1 Child1Scheme="http://www.google.com">1234566546</Child1> 
     <Child1 Child1Scheme="http://www.fpml.org/coding-scheme/external/UNique">AbcdeXYZ-23243423</Child1> 
     <country 
      countryScheme="http://www.fpml.org/coding-scheme/external/country-identifier">1030253498</country> 
     <state stateScheme="http://www.fpml.org/coding-scheme/external/state-identifier">23423423423</state> 
    </parentnode> 

    <parentnode xmlns="http://www.fpml.org/FpML-5/recordkeeping" 
     fpmlVersion="5-5" xmlns:abcde="http://www.abcde.com/ext" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://www.abcde.com/ext /../xmls/XYZ/recordkeeping/abcde-ext.xsd"> 
     <Child1 Child1Scheme="http://www.google.com">1234566546</Child1> 
     <Child1 Child1Scheme="http://www.fpml.org/coding-scheme/external/UNique">AbcdeXYZ-154555</Child1> 
     <country 
      countryScheme="http://www.fpml.org/coding-scheme/external/country-identifier">1030253498</country> 
     <state stateScheme="http://www.fpml.org/coding-scheme/external/state-identifier">434343242</state> 
    </parentnode> 

    <parentnode xmlns="http://www.fpml.org/FpML-5/recordkeeping" 
     fpmlVersion="5-5" xmlns:abcde="http://www.abcde.com/ext" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://www.abcde.com/ext /../xmls/XYZ/recordkeeping/abcde-ext.xsd"> 
     <Child1 Child1Scheme="http://www.google.com">1234566546</Child1> 
     <Child1 Child1Scheme="http://www.fpml.org/coding-scheme/external/UNique">AbcdeXYZ-4566545</Child1> 
     <country 
      countryScheme="http://www.fpml.org/coding-scheme/external/country-identifier">1030253498</country> 
     <state stateScheme="http://www.fpml.org/coding-scheme/external/state-identifier">2323232323</state> 
    </parentnode> 
</rootnode> 

을 그리고 당신은 단지 그것을 확인, 파일을 읽기 시작할 수 있습니다.

import java.io.File; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 

import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 

public class ReadXMLFile { 

    public static void main(String argv[]) { 

     try { 
      File fXmlFile = new File("file.xml"); 
      DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
      DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
      Document doc = dBuilder.parse(fXmlFile); 

      doc.getDocumentElement().normalize(); 

      System.out.println("Root element :" + doc.getDocumentElement().getNodeName()); 

      NodeList nList = doc.getElementsByTagName("parentnode"); 

      for (int temp = 0; temp < nList.getLength(); temp++) { 

       Node nNode = nList.item(temp); 

       System.out.println("Current Element :" + nNode.getNodeName()); 

       if (nNode.getNodeType() == Node.ELEMENT_NODE) { 
        Element eElement = (Element) nNode; 
        System.out.println("Staff id : " + eElement.getElementsByTagName("Child1").item(0).getTextContent()); 
        System.out.println("First Name : " + eElement.getElementsByTagName("Child1").item(0).getTextContent()); 
        System.out.println("Last Name : " + eElement.getElementsByTagName("country").item(0).getTextContent()); 
        System.out.println("Nick Name : " + eElement.getElementsByTagName("state").item(0).getTextContent()); 
       } 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

정말 당신의 도움을 주셔서 감사합니다, 그것은 당신이 ib XML 형식에 의해 말한, 맞았지만, 하나의 텍스트 파일에 함께 많은 XML로 구성되어있는 텍스트 형식의 입력 파일에 대해 물어 보는거야 그 텍스트 파일이 될. – Euphoria

+0

제발 좀 더 알려주시겠습니까? 나는 왜 일반 텍스트 파일처럼 xml이나 xml 콜렉션을 읽어야하는지 알지 못한다. 나는 당신이 줄 단위로 그것을 읽고 싶다는 것을 알고 있지만, XML이 작동하는 방식은 아니다. –

+0

나는 XML 파일의 모음을 생성하고있는 로그 파일입니다. 특정 요소를 몇 번이나 찾아야합니까? 특정 요소가 반복됩니다. – Euphoria