我正在用java开发一个xml映射器。我使用Eclipse Moxy,因为我遇到了一个问题。我可以将父节点的所有子节点都放入hashmap中。但问题是父节点的属性也会进入该hashmap。但我希望分别获得这些属性。以下是我的代码
我有以下xml段
<keystore name="xyz">
<type>JKS</type>
<password>wso2carbon</password>
<keyAlias>wso2carbon</keyAlias>
<keyPassword>wso2carbon</keyPassword>
</keystore>
以下是相关的XSD部分
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="keystore">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="type"/>
<xs:element type="xs:string" name="password"/>
<xs:element type="xs:string" name="keyAlias"/>
<xs:element type="xs:string" name="keyPassword"/>
</xs:sequence>
<xs:attribute type="xs:string" name="name"/>
</xs:complexType>
</xs:element>
</xs:schema>
我想在我的java代码中映射这个XML。当我使用Moxy访问它时,我也在子元素的映射中获得“name”属性。例如:
[0]名称
[1]输入
[2]密码
........
但我想分别获取父元素(“name”)的属性(不在子元素映射中)。我可以单独获取xml元素的属性吗?吗
这就是我的代码的样子
private DynamicEntity getDynamicEntity()
throws SAXException, URISyntaxException, IOException, XMLStreamException,
ConfigurationMismatchException {
FileInputStream xsdInputStream = null;
DynamicJAXBContext jaxbContext;
DynamicEntity autoElement = null;
try {
xsdInputStream = new FileInputStream("/home/....../automation_mapping.xsd");
FileInputStream xmlInputStream = new FileInputStream("/home/...../automation.xml");
jaxbContext = DynamicJAXBContextFactory.createContextFromXSD(xsdInputStream, null, null, null);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
autoElement = (DynamicEntity) unmarshaller.unmarshal(xmlInputStream);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return autoElement;
}
此 autoElement 对象包含xml文件数据。然后我使用以下代码访问DynamicEntity
DynamicEntity myEntity=autoelment.get(name);
但问题是元素的属性无法单独使用 get()方法
答案 0 :(得分:0)
DynamicEntity
对应于域模型中的Java类。您可以以相同方式访问映射到属性和元素的属性的原因:
keyStoreDE.get("name");
keyStoreDE.get("type');
在真正的POJO(见下文)中,您是否能够以相同的方式访问它们:
keyStorePOJO.getName();
keyStorePOJO.getType();
import javax.xml.bind.annotation.*;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"type",
"password",
"keyAlias",
"keyPassword"
})
@XmlRootElement(name = "keystore")
public class Keystore {
@XmlElement(required = true)
protected String type;
@XmlElement(required = true)
protected String password;
@XmlElement(required = true)
protected String keyAlias;
@XmlElement(required = true)
protected String keyPassword;
@XmlAttribute(name = "name")
protected String name;
// get/set methods
}