【发布时间】:2021-11-20 17:04:36
【问题描述】:
我是 jaxB XML 解析器的新手。我需要从元素标记中获取所有属性(idref、类型、名称、范围)** 我尝试了一些东西但得到了错误。
XML 文件
<?xml version="1.0" encoding="windows-1252"?>
<xmi:XMIxmi:version="2.1"xmlns:uml="http://www.omg.org/spec/UML/20090901"xmlns:xmi="http://schema.omg.org/spec/XMI/2.1" xmlns:thecustomprofile="http://www.sparxsystems.com/profiles/thecustomprofile/1.0" xmlns:SysML="http://www.omg.org/spec/SysML/20161101/SysML">
<xmi:Documentation exporter="Enterprise Architect" exporterVersion="6.5" exporterID="1555"/>
<xmi:Extension extender="Enterprise Architect" extenderID="6.5">
<elements>
<element xmi:idref="EAPK_5560E5AF_736A_4703_AC79_CA3FAA60984B" xmi:type="uml:Package" name="PackageView" scope="public"></element>
<element xmi:idref="EAPK_59058493_9220_4b05_888A_67C6854C97EC" xmi:type="uml:Package" name="Read from Communication Interface" scope="public">
</element>
<element xmi:idref="EAID_870B8E54_0FF2_4a90_A9C1_23F477DF695F" xmi:type="uml:Activity" name="Read from communication interface" scope="public">
</element>
</elements>
</xmi:Extension>
</xmi:XMI>
主类
public class XmlElement {
public static void main(String[] args) {
JAXBContext jaxbContext;
String fileLocation = "C:\\vinoth\\XML_JaxbParser\\elements.xml";
try (FileInputStream fileInputStream = new FileInputStream(fileLocation)) {
System.out.println("******** PARSING START ********");
jaxbContext = JAXBContext.newInstance(Xmi.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
elements elements = (elements) unmarshaller.unmarshal(fileInputStream);
System.out.println(elements);
System.out.println("******** PARSING DONE ********");
} catch (Exception e) {
System.out.println("******** ERROR: SOMETHING WENT WRONG ********");
e.printStackTrace();
}
}
}
elements.java
@XmlRootElement(name = "xmi")
@XmlAccessorType(XmlAccessType.FIELD)
public class Elements {
@XmlElement(name = "elements")
private List<Elements> elements;
// Generate Getters and Setters...
@Override
public String toString() {
return "Elements [elements="+ elements +"]";
}
}
element.java
@XmlAccessorType(XmlAccessType.FIELD)
public class Element {
@XmlAttribute(name = "idref")
private String idref;
@XmlAttribute(name = "type")
private String type;
@XmlAttribute(name = "name")
private String name;
@XmlAttribute(name = "scope")
private String scope;
//Generate Getters and Setters...
@Override
public String toString() {
return "Element [idref=" + idref + ",type=" + type + ", name=" + name + ", scope=" + scope+ "]";
}
}
我需要从给定的 XML 文件中获取元素属性。我不知道我在哪里做错了。根元素和父子元素,我可以从映射部分理解错误。但我无法解决。
【问题讨论】:
-
错误通常会告诉你哪里出了问题。不在您的问题中包含它会使其他人更难解决问题。
-
XML 中元素名称和属性之间缺少一些空格。我不知道这是您真正的 XML 代码,还是只是此处的不准确复制和粘贴。
标签: java xml xml-parsing jaxb unmarshalling