gpt4 book ai didi

java - 解析XML类型文件

转载 作者:行者123 更新时间:2023-11-30 07:06:48 25 4
gpt4 key购买 nike

我正在使用 Java,并且需要从一个 AutomationML 文件(XML 类型文件)获取信息。我尝试使用 JAXB 来做到这一点,但最终我无法获得我需要的信息。在 AML 中,我有一个 InstanceHierarchy,其中包含 3 个带有一些属性的 InternalElement,并且我需要该属性值,但使用 JAXB 我获取了 AttributeName,但无法获取其值。

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 或给我一些如何解决这个问题的指导吗?提前致谢。

最佳答案

您实际上可以完全避免 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>

关于java - 解析XML类型文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39962233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com