2013-03-23 2 views
0

좋은 하루! paars xml에 정상적인 알고리즘을 찾을 수없고 내 enteties에 대한 데이터를 가져올 수 없습니다. 그래서 나는이 같은 XML이 : 나는재귀 XML 구문 분석 및 데이터 가져 오기 java

public class CategoryParseXml { 
    public static Integer levelCounter = 0; 
    public final static String IDGR_LABEL = "IDGR"; 
    public final static String NAMEGR_LABEL = "NAMEGR"; 

    private List<CategoryEntity> categoryEntities = new ArrayList<CategoryEntity>(); 

    public void parseCategory(final Document doc, final List<String> list, final Element element){ 
     final NodeList nodeChildrenList = element.getChildNodes(); 

     CategoryEntity categoryEntity = new CategoryEntity(); 
     categoryEntity.setLevel(levelCounter); 

     for(int i = 0; i<nodeChildrenList.getLength(); i++){ 
      final Node node = nodeChildrenList.item(i); 
      if(node.getNodeType() == Node.ELEMENT_NODE){ 
       list.add(node.getNodeName()); 
       if(node.getNodeName().toUpperCase().equals(ParseXmlData.CATEGORIES_LABEL.toUpperCase())){ 
        CategoryParseXml.levelCounter++; 
        parseCategory(doc,list,(Element) node); 
       } 
       if(node.getNodeName().toUpperCase().equals(CategoryParseXml.IDGR_LABEL.toUpperCase())){ 
        categoryEntity.setCategoryId(node.getNodeValue()); 
       } 
       if(node.getNodeName().toUpperCase().equals(CategoryParseXml.NAMEGR_LABEL.toUpperCase())){ 
        categoryEntity.setName(node.getNodeValue()); 
       } 

       parseCategory(doc,list,(Element) node); 
      } 
     } 

    } 

} 

내가 플레이 프레임 워크를 사용하여 그것을

public class ParseXmlData { 
    public final static String FILE_PATH = "public/1cimport/export.xml"; 
    private DocumentBuilderFactory dbfactory; 
    private DocumentBuilder documentBuilder; 
    private Document doc; 

    public final static String CATEGORIES_LABEL = "categories"; 

    private Integer levelCounter = 0; 
    public ParseXmlData(){ 
     File xmlFile = new File(FILE_PATH); 

     dbfactory = DocumentBuilderFactory.newInstance(); 
     try { 
      documentBuilder = dbfactory.newDocumentBuilder(); 
      doc = documentBuilder.parse(FILE_PATH); 
      final List<String> l = new ArrayList<String>(); 

      parse(doc, l, doc.getDocumentElement()); 
     } catch (Exception e) { 
      e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. 
     } 


    } 
    public void parse(final Document doc, final List<String> list, final Element element){ 

     final NodeList nodeChildrenList = element.getChildNodes(); 

     for(int i = 0; i<nodeChildrenList.getLength(); i++){ 
      final Node node = nodeChildrenList.item(i); 
      if(node.getNodeType() == Node.ELEMENT_NODE){ 
       list.add(node.getNodeName()); 
       if(node.getNodeName().toUpperCase().equals(ParseXmlData.CATEGORIES_LABEL.toUpperCase())){ 
        CategoryParseXml categoryParseXml = new CategoryParseXml(); 
        categoryParseXml.parseCategory(doc,list,(Element) node); 
       } 
       parse(doc,list,(Element) node); 
      } 
     } 

    } 
} 

그리고 다른 클래스를 구문 분석을 시도

<?xml version="1.0" encoding="UTF-8"?> 
<export> 
    <categories> 
     <category> 
      <idgr xmlns:type="string">bd72d90d-55bc-11d9-848a-00112f43529a</idgr> 
      <namegr xmlns:type="string">Обувь</namegr> 
      <categories> 
       <category> 
        <idgr xmlns:type="string">bd72d90e-55bc-11d9-848a-00112f43529a</idgr> 
        <namegr xmlns:type="string">Женская обувь</namegr> 
        <categories> 
         <category> 
          <idgr xmlns:type="string">bd72d910-55bc-11d9-848a-00112f43529a</idgr> 
          <namegr xmlns:type="string">Женские ботфорты коричневые</namegr> 
         </category> 
         <category> 
          <idgr xmlns:type="string">bd72d913-55bc-11d9-848a-00112f43529a</idgr> 
          <namegr xmlns:type="string">Ботинки женские демисезонные</namegr> 
         </category> 
         <category> 
          <idgr xmlns:type="string">bd72d916-55bc-11d9-848a-00112f43529a</idgr> 
          <namegr xmlns:type="string">Ботинки женские натуральная кожа</namegr> 
         </category> 
         <category> 
          <idgr xmlns:type="string">bd72d91b-55bc-11d9-848a-00112f43529a</idgr> 
          <namegr xmlns:type="string">Женские босоножки</namegr> 
         </category> 
         <category> 
          <idgr xmlns:type="string">dee6e178-55bc-11d9-848a-00112f43529a</idgr> 
          <namegr xmlns:type="string">Женские модельные туфли</namegr> 
         </category> 
         <category> 
          <idgr xmlns:type="string">dee6e17b-55bc-11d9-848a-00112f43529a</idgr> 
          <namegr xmlns:type="string">Женские сапоги с искусственным мехом</namegr> 
         </category> 
         <category> 
          <idgr xmlns:type="string">e8a71f9a-55bc-11d9-848a-00112f43529a</idgr> 
          <namegr xmlns:type="string">Женские туфли-мокасины</namegr> 
         </category> 
         <category> 
          <idgr xmlns:type="string">e8a71fa7-55bc-11d9-848a-00112f43529a</idgr> 
          <namegr xmlns:type="string">Женские сапоги с натуральным мехом</namegr> 
         </category> 
         <category> 
          <idgr xmlns:type="string">e8a71fa9-55bc-11d9-848a-00112f43529a</idgr> 
          <namegr xmlns:type="string">Сапоги жен. низкие</namegr> 
         </category> 
         <category> 
          <idgr xmlns:type="string">e8a71faf-55bc-11d9-848a-00112f43529a</idgr> 
          <namegr xmlns:type="string">Сапоги жен высокие</namegr> 
         </category> 
         <category> 
          <idgr xmlns:type="string">e8a71fb3-55bc-11d9-848a-00112f43529a</idgr> 
          <namegr xmlns:type="string">Женские туфли</namegr> 
         </category> 
         <category> 
          <idgr xmlns:type="string">e8a71fb7-55bc-11d9-848a-00112f43529a</idgr> 
          <namegr xmlns:type="string">Полусапожки на шнурках</namegr> 
         </category> 
        </categories> 
       </category> 
       <category> 
        <idgr xmlns:type="string">dee6e186-55bc-11d9-848a-00112f43529a</idgr> 
        <namegr xmlns:type="string">Мужская обувь</namegr> 
        <categories> 
         <category> 
          <idgr xmlns:type="string">dee6e187-55bc-11d9-848a-00112f43529a</idgr> 
          <namegr xmlns:type="string">Мужские мокасины</namegr> 
         </category> 
         <category> 
          <idgr xmlns:type="string">dee6e18a-55bc-11d9-848a-00112f43529a</idgr> 
          <namegr xmlns:type="string">Мужские ботинки демисезонные</namegr> 
         </category> 
         <category> 
          <idgr xmlns:type="string">e8a71fab-55bc-11d9-848a-00112f43529a</idgr> 
          <namegr xmlns:type="string">Мужские сапоги с натуральным мехом</namegr> 
         </category> 
         <category> 
          <idgr xmlns:type="string">e8a71fad-55bc-11d9-848a-00112f43529a</idgr> 
          <namegr xmlns:type="string">Мужские туфли нубук</namegr> 
         </category> 
         <category> 
          <idgr xmlns:type="string">e8a71fb1-55bc-11d9-848a-00112f43529a</idgr> 
          <namegr xmlns:type="string">Мужские сапоги с искуственным мехом</namegr> 
         </category> 
         <category> 
          <idgr xmlns:type="string">e8a71fb5-55bc-11d9-848a-00112f43529a</idgr> 
          <namegr xmlns:type="string">Ботинки мужские</namegr> 
         </category> 
        </categories> 
       </category> 
       <category> 
        <idgr xmlns:type="string">dee6e1cf-55bc-11d9-848a-00112f43529a</idgr> 
        <namegr xmlns:type="string">Кроссовки</namegr> 
        <categories> 
         <category> 
          <idgr xmlns:type="string">dee6e1d0-55bc-11d9-848a-00112f43529a</idgr> 
          <namegr xmlns:type="string">Кроссовки "ADIDAS"</namegr> 
         </category> 
         <category> 
          <idgr xmlns:type="string">dee6e1d3-55bc-11d9-848a-00112f43529a</idgr> 
          <namegr xmlns:type="string">Кроссовки "REEBOK"</namegr> 
         </category> 
         <category> 
          <idgr xmlns:type="string">dee6e1d6-55bc-11d9-848a-00112f43529a</idgr> 
          <namegr xmlns:type="string">Кроссовки высокие нат. кожа</namegr> 
         </category> 
         <category> 
          <idgr xmlns:type="string">dee6e1d9-55bc-11d9-848a-00112f43529a</idgr> 
          <namegr xmlns:type="string">Кроссовки мужские, кожа</namegr> 
         </category> 
        </categories> 
       </category> 
       <category> 
        <idgr xmlns:type="string">05e26d88-01e4-11dc-a411-00055d80a2d1</idgr> 
        <namegr xmlns:type="string">Аксессуары</namegr> 
        <categories> 
         <category> 
          <idgr xmlns:type="string">05e26d89-01e4-11dc-a411-00055d80a2d1</idgr> 
          <namegr xmlns:type="string">Крем для обуви</namegr> 
         </category> 
         <category> 
          <idgr xmlns:type="string">05e26d8b-01e4-11dc-a411-00055d80a2d1</idgr> 
          <namegr xmlns:type="string">Щетка для обуви</namegr> 
         </category> 
        </categories> 
       </category> 
      </categories> 
     </category> 
</categories> 
</export> 

(코드에서 러시아어 텍스트 죄송합니다) ORM을 지원하는 ebean. 내가 하위 범주의 목록을 얻을 필요로 할 때 내가 그것을 만들고 범주에 추가 할 필요가있을 때 나는 순간을 찾을 수 없습니다

@Entity 
public class CategoryEntity extends Model { 
    @Id 
    private String categoryId; 

    private String Name; 
@OneToMany(targetEntity = CategoryEntity.class, cascade = CascadeType.ALL) 
private List<CategoryEntity> categories; 
    private Integer level; 
} 

처럼 그래서 엔티티 보인다. 내가 당신이라면 나는 다른 접근 시도 할 것

답변

0

이 XML에서이 클래스의 실체를 채우기 위해 나에게 몇 가지 아이디어를 제공하십시오 :

  1. 가 XSD에서이 Recursion in an XML schema?
  2. 을 참조하십시오 XSD 스키마 지원 재귀 만들기를 스키마 JAXB를 사용하여 XML에 직렬화하고 XML에서 직렬화 해제 할 수있는 클래스를 작성하십시오.이 부분도 참조하십시오. JAXB endless data structure, recursive binding?
  3. JAXB에서 생성 한 동일한 클래스에 JPA 엔티티로 주석을 추가하고이를 지속성을 위해 직접 사용할 수 있습니다. JPA 엔티티에 대해 서로 다른 분리 된 클래스를 생성하고 JPA와 JAXB 클래스간에 값을 이동하는 예를 들어