【问题标题】:Cannot get Attributes separately in the xml file in EclipseLink - Moxy无法在 EclipseLink 的 xml 文件中单独获取属性 - Moxy
【发布时间】:2013-12-04 11:26:26
【问题描述】:

我正在用 java 开发一个 xml 映射器。我为此使用 Eclipse Moxy,但我在其中遇到了一个问题。我可以将父节点的所有子节点放入哈希图中。但问题是父节点的属性也进入该哈希图。但我想分别获得这些属性。以下是我的代码

我有以下 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>

我想将此 XML 映射到我的 java 代码中。当我使用 Moxy 访问它时,我也会在子元素的映射中获得“名称”属性。例如:

[0]名称

[1]类型

[2]密码

........

但我想单独获取父元素(“名称”)的属性(不在子元素映射中)。我可以单独获取 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()方法无法单独获取元素的属性

【问题讨论】:

  • 你的代码是什么样的?
  • 我已将我的代码 sn-p 添加到我的问题中。

标签: java xml eclipselink moxy


【解决方案1】:

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
}

【讨论】:

  • 我的目的是在不生成任何 java 代码的情况下访问 XML。这意味着我没有映射,我想使用 DynamicEntity 中的“get()”方法访问 xml。这是我的关键需求。这是因为我的 XML 文件正在更改。我可以使用 get() 遍历 XML,但无法区分 XML 元素的属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多