良い一日!xml を解析してエンティティのデータを取得するための通常のアルゴリズムが見つかりません。だから私はこのようなxmlを持っています:
<?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>
(コード内のロシア語のテキストについては申し訳ありません)私はそれを解析しようとしました
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);
}
}
}
}
そして別のクラス
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);
}
}
}
}
私は ORM サポートとして play フレームワークと 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;
}
サブカテゴリのリストを取得する必要があるときと、それを作成してカテゴリに追加する必要があるときがわかりません。このxmlからこのクラスエンティティを埋めるためのアイデアを教えてください