2013-04-17 5 views
1

샘플 코드로 Java에서 XML 파일을 읽는 가장 좋은 방법을 알려주시겠습니까? XML 콘텐츠는 아래와 같습니다. 그것은 매우 작은 XML 파일의 이후Java에서 XML 파일 내용 읽기

<table sourceName="person" targetName="person"> 
     <column sourceName="id" targetName="id"/> 
     <column sourceName="name" targetName="name"/>`` 
</table> 

답변

0

, 내가 DOM 구문 분석을 사용, 당신은 여기에 전체 예를 찾을 수 있습니다

http://www.mkyong.com/java/how-to-read-xml-file-in-java-dom-parser/

그러나 본질을 :

File fXmlFile = new File("/Users/mkyong/staff.xml"); 
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
Document doc = dBuilder.parse(fXmlFile); 

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

for (int temp = 0; temp < nList.getLength(); temp++) { 
    Node tableNode = nList.item(temp); 
    Element tableElement = (Element) tableNode; 

    System.out.println("Table source name: " + tableElement.getAttribute("sourceName")); 
    System.out.println("Table target name: " + tableElement.getAttribute("targetName")); 

    NodeList columnList = tableElement.getElementsByTagName("column"); 
    for (int j = 0; j < columnList.getLength(); j++) { 
     Node columnNode = columnList.item(j); 
     Element columnElement = (Element) columnNode; 

     System.out.println("Column source name: " + columnElement.getAttribute("sourceName")); 
     System.out.println("Column target name: " + columnElement.getAttribute("targetName")); 


    } 
} 

하세요 예제의 맨 위에있는 관련 가져 오기를 참조하십시오.

import org.simpleframework.xml.Serializer; 
import org.simpleframework.xml.core.Persister; 

public class App { 

    public static void main(String[] args) throws Exception { 
     String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" 
       + "<table sourceName=\"person\" targetName=\"person\">\n" 
       + " <column sourceName=\"id\" targetName=\"id\"/>\n" 
       + " <column sourceName=\"name\" targetName=\"name\"/>``\n" 
       + "</table>"; 
     Serializer serializer = new Persister(); 
     Table table = serializer.read(Table.class, xml); 
     System.out.println(table.getSourceName()); 
     System.out.println(table.getTargetName()); 
     for (Column colunmn : table.getColumns()) { 
      System.out.println(colunmn.getSourceName()); 
      System.out.println(colunmn.getTargetName()); 
     } 
    } 
} 

Table :

당신은 Simple 형태의 간단한 XML 직렬화를 사용할 수

내가 JAXB을 사용
+0

안녕하세요, 내 구성 파일에 여러 테이블 구성이 포함되어 있습니다. 테이블 관련 열을 읽고 일부 처리가 필요합니다. 구성 파일은 \t <= "사람"에서 targetName = "사람"테이블 SOURCENAME> \t \t 같은 <열 SOURCENAME = "아이디"targetName을 = "ID"/> \t \t <열 SOURCENAME = "이름"에서 targetName = "보인다 "/> \t \t <표 SOURCENAME ="부서 "에서 targetName ="부서 "> \t \t <열 SOURCENAME ="deptId "에서 targetName ="ID "/> \t \t <열 SOURCENAME ="DEPTNAME "에서 targetName 이름 = "name"/> \t

+0

그에 따라 내 대답을 편집했습니다. 먼저 테이블을 반복 한 다음 열을 반복합니다. – santamanno

3

, 이것을 시도, 그것은

public class Test1 { 
    @XmlAttribute 
    String sourceName; 
    @XmlAttribute 
    String targetName; 
    @XmlElement(name = "column") 
    List<Test1> columns; 

    public static Test1 unmarshal(File file) { 
     return JAXB.unmarshal(file, Test1.class); 
    } 
} 
+1

이것은 유용하지만 불완전한 대답입니다. 필요한 수입을 추가하고 JAXB 변수의 출처를 보여줘야합니다. 이것은 나를 위해 작동합니다 : import java.io.File; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; import javax.xml.bind.annotation. *; JAXBContext jaxbContext = JAXBContext.newInstance (Test1.class); Unmarshaller JAXB = jaxbContext.createUnmarshaller(); return JAXB.unmarshal (file, Test1.class); 예외 처리 블록 내에 try {...} catch (JAXBException e) {...} –

1

작동 A., 희망이 도움이 :

import java.util.List; 
import org.simpleframework.xml.Attribute; 
import org.simpleframework.xml.ElementList; 
import org.simpleframework.xml.Root; 

@Root(name = "table") 
public class Table { 

    @Attribute 
    private String sourceName; 
    @Attribute 
    private String targetName; 
    @ElementList(name = "column", inline = true) 
    private List<Column> columns; 

    public Table() { 
    } 

    public String getSourceName() { 
     return sourceName; 
    } 

    public void setSourceName(String sourceName) { 
     this.sourceName = sourceName; 
    } 

    public String getTargetName() { 
     return targetName; 
    } 

    public void setTargetName(String targetName) { 
     this.targetName = targetName; 
    } 

    public List<Column> getColumns() { 
     return columns; 
    } 

    public void setColumns(List<Column> columns) { 
     this.columns = columns; 
    } 
} 

Column :

import org.simpleframework.xml.Attribute; 
import org.simpleframework.xml.Root; 

@Root(name = "column") 
public class Column { 

    @Attribute 
    private String sourceName; 
    @Attribute 
    private String targetName; 

    public Column() { 
    } 

    public String getSourceName() { 
     return sourceName; 
    } 

    public void setSourceName(String sourceName) { 
     this.sourceName = sourceName; 
    } 

    public String getTargetName() { 
     return targetName; 
    } 

    public void setTargetName(String targetName) { 
     this.targetName = targetName; 
    } 
} 
0

책은 주제에 작성되었습니다, 그리고 모두가 달려있다. JAXB는 파일의 구조가 간단하고 안정적이라면 (요소/속성을 Java 클래스로 맵핑하고 Java 클래스를 일주일에 세 번 변경하고 다시 컴파일하지 않으려는 경우) 좋은 선택입니다.

그렇지 않으면 다양한 DOM 모델이 있습니다. DOM이 가장 널리 사용되고 오래되고 최악입니다. 나는 JDOM2 또는 XOM을 권하고 싶다.

하지만 이상적인 것은 데이터를 Java로 읽지 않는 것입니다. "XRX"또는 "종단 간 XML"원칙은 전체 애플리케이션에 대해 XSLT 및 XQuery와 같은 XML 지향 언어를 사용하는 것입니다. 필요할 경우 Java 지원 루틴을 호출하는 경우가 있습니다.