2013-05-10 5 views
0

다음 XML을 구문 분석하는 가장 간단한 방법은 무엇입니까?XML을 다른 형식으로 변환 하시겠습니까?

<Fruit> 
    <FruitId>Bannana</FruitId> 
    <FruitColor>Yellow</FruitColor> 
    <FruitShape>Moon</FruitShape> 
    <Customer> 
    <Name>Joe</Name> 
    <Numbereaten>5</NumberEaten> 
    <Weight>2.6</Weight> 
    </Customer> 
    <Customer> 
    <Name>Mark</Name> 
    <Numbereaten>8</NumberEaten> 
    <Weight>5.0</Weight> 
    </Customer> 
</Fruit> 
<Fruit> 

.....

내가 여러 XML 파일을 가정하고 내가 특정 필드 (과일 Id)을 모든 (숫자에 해당하는 CSV를 만들 수 있도록 정보를 추출하고 싶었다 먹는 것과 체중의 쌍, 고객 이름을 제외하고) 어떻게 이것을 할 수 있습니까?

Bannana, 5, 2.6 
Bannana, 8, 5 
... 
Apple 6, 5 
Apple 3, 2 

나는 자바에 대한 DOMParser 및 SAXParser를가 알고 있지만, 다른 언어 또는 다른 수단이 쉽게이 정보는 얻을 경우 궁금 : 이상적으로 나는 다음과 같은 나타내는 일부 데이터 구조 또는 CSV를 얻을 수 있도록하려면 지금이 시대를 살기 위해 2013 년에이 시대에 사용할 수 있습니다. 아니면 심지어 일부를 contians 일부 사전 데이터 구조의 데이터를 캡처 할 수 :

은 쉽게 방식으로 구성되어
Bannana: [5,2.6], [8,5] 

하도록 프로그래밍 방식 iteratable 추출 이잖아.

답변

1

이것은 XSLT의 일반적인 사용 사례입니다. 이 자바 코드를 사용할 수 형질 전환

<?xml version="1.0"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0"> 
    <xsl:output method="text" encoding="ISO-8859-1" /> 
    <xsl:variable name="newline" select="'&#xA;'"/> 
    <xsl:template match="Fruit"> 
     <xsl:for-each select="Customer"> 
      <xsl:value-of select="preceding-sibling::FruitId" /> 
      <xsl:text>,</xsl:text> 
      <xsl:value-of select="Numbereaten" /> 
      <xsl:text>,</xsl:text> 
      <xsl:value-of select="Weight" /> 
      <xsl:value-of select="$newline" /> 
     </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 

:

Source xmlSource = new StreamSource(new File("xmlFile")); 
    Source xsltSource = new StreamSource(new File("xsltFile")); 
    Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
    StreamResult csvResult = new StreamResult(new File("file.csv")); 
    transformer.transform(xmlSource, csvResult); 

XSLT 버전의 장점은 그 자바 코드는 매우 짧은

XSLT 파일은 예를 들어 다음과 같을 것 . XSLT 파일은 코드 외부에있을 수 있으며 XML 파일이 변경되면 쉽게 적용될 수 있습니다.

+0

Whats output to System.out. 값이 아닌 XML로 나타나거나 데이터 구조에 저장합니다. System.out 이외의 값만 출력 할 수있는 방법이 있습니까? – Rolando

+0

자바 코드를 편집했습니다. 이제 csv 텍스트 결과를 파일에 기록합니다. –

+0

이것은 "이상적으로 다음을 나타내는 데이터 구조 또는 CSV를 가져올 수 있기를 원합니다."라는 질문에 대한 해결책입니다. 질문에 표시된 방식으로 CSV 형식의 데이터를 반환합니다. –

0

저는 최근에 SAXParser를 사용했으며 구현하기가 아주 간단하고 간단했습니다.

특히 XMLReader는 구현하기가 쉽고 XMLStreamReader는 구현하는 데 약간 시간이 걸렸습니다.

리더의 장점은 하나의 XML 태그에서 다음 태그로 건너 뛰고 바로 데이터를 추출 할 수 있다는 것입니다. StreamReader는 설정 시간은 조금 더 길지만 더 유연합니다.

만약 내가 당신이라면 SAXParser와 DOMParser의 차이점을 읽고 자신의 상황에 가장 적합한 것을 결정하고 실행 해보자.

0

XSLT 참으로, 또는 예는 매우 간단하고 당신은 당신의 XML에서 쉽게 객체를 생성하는 XSLT, 나는

  • 사용 JAXB에 조언을 것 "학습"하지 않으려면
  • 파일에 맞게 객체를 출력하십시오.
관련 문제