2016-10-10 4 views
1

Я использую Java, и мне нужно получить информацию из одного файла AutomationML (файл типа XML). Я пытаюсь использовать JAXB для этого, но в итоге я не могу получить нужную мне информацию. В AML У меня есть одна InstanceHierarchy с 3 InternalElements с некоторыми атрибутами, и мне нужны эти значения атрибутов, но с использованием JAXB я получаю имя атрибута, но я не могу получить его значение.Анализ файла типа XML

public static void main(String[] args) throws Exception { 

    CAEXFile caex = null; 
    CAEXFile.InstanceHierarchy ih = null; 
    try { 

     JAXBContext jc = JAXBContext.newInstance(CAEXFile.class); 
     //JAXBContext jc = JAXBContext.newInstance(generated.CAEXFile.InstanceHierarchy.class); 
     Unmarshaller ums = jc.createUnmarshaller(); 
     CAEXFile aml = (CAEXFile)ums.unmarshal(new File("src\\teste2.aml")); 

     System.out.println("ins = " + aml.getInstanceHierarchy().get(0).getInternalElement().get(0).getAttribute().get(0).getName()); 

    } catch (JAXBException e) { 
    System.out.println(e.getMessage()); 
    } 
} 

XSD файл XSD (CAEX) и файл AML AML Может кто-то помочь мне с помощью JAXB или дать мне несколько направлений, как решить эту проблему? Спасибо заранее.

ответ

1

Вы можете вообще избежать JAXB, что может быть полезно в зависимости от остальной части вашего кода. Если вы можете использовать Java 8, возможно, Dynamics будет хорошим решением &.

XmlDynamic example = new XmlDynamic(xmlStringOrReaderOrInputSourceEtc); 

String firstInternalName = example.get("CAEXFile|InstanceHierarchy|InternalElement|@Name").asString(); 
// TestProduct_1 

List<String> allInternalNames = example.get("CAEXFile").children() 
    .filter(hasElementName("InstanceHierarchy")) // import static alexh.weak.XmlDynamic.hasElementName; 
    .flatMap(Dynamic::children) 
    .filter(hasElementName("InternalElement")) 
    .map(internalElement -> internalElement.get("@Name").asString()) 
    .collect(toList()); 
// [TestProduct_1, TestResource_1, TestProduct_2, TestProduct_3, TestResource_2] 

Это один и легкая дополнительная зависимость, то есть в Maven:

<dependency> 
    <groupId>com.github.alexheretic</groupId> 
    <artifactId>dynamics</artifactId> 
    <version>2.3</version> 
</dependency> 
+0

Спасибо за ответ, я решил с двойной маршализацией;) –

Смежные вопросы