我想知道如何使用JAXB在XML中注释嵌套元素。
我的XML应该喜欢这个
<?xml version='1.0' encoding='utf-8'?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xml:base="http://127.0.0.1:9089/TCMBCommon-iris/TCMBCommon.svc/GB0010001/">
<title type="text">enqTcibAcctDetailss</title>
<id>http://127.0.0.1:9089/TCMBCommon-iris/TCMBCommon.svc/GB0010001/enqTcibAcctDetailss()</id>
<updated>2016-09-14T10:13:48Z</updated>
<link rel="self" title="enqTcibAcctDetailss" href="enqTcibAcctDetailss()" />
<entry>
<id>http://127.0.0.1:9089/TCMBCommon-iris/TCMBCommon.svc/GB0010001/enqTcibAcctDetailss('')</id>
<title type="text" />
<updated>2016-09-14T10:13:48Z</updated>
<author>
<name />
</author>
<link rel="self" title="enqTcibAcctDetails" href="enqTcibAcctDetailss('78239')" />
<category term="TCMBCommon-modelsModel.enqTcibAcctDetails" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
<content type="application/xml">
<m:properties>
<d:CategoryId>1001</d:CategoryId>
<d:Type>Current Account</d:Type>
<d:Acc>78239</d:Acc>
<d:Ccy>GBP</d:Ccy>
<d:OnlineActualBal>330.47</d:OnlineActualBal>
<d:RealBalance>330.47</d:RealBalance>
<d:Sortcode>601613</d:Sortcode>
<d:Customer>100336</d:Customer>
<d:ArrangementId>AA16082JD77P</d:ArrangementId>
<d:Ac1>78239 Rolf Gerling</d:Ac1>
<d:ProductGroup>CURRENT.ACCOUNTS</d:ProductGroup>
<d:ProductLine>ACCOUNTS</d:ProductLine>
<d:ProductName>CURRENT.ACCOUNT</d:ProductName>
<d:AvailAmt>330.47</d:AvailAmt>
<d:AvailBalWithLimit>660.94</d:AvailBalWithLimit>
<d:IbanId>GB22DEMO60161300078239</d:IbanId>
<d:Branch>Model Bank 201608</d:Branch>
<d:AcctTransRights>YES</d:AcctTransRights>
<d:enqTcibAcctDetails_PortfolioNoMvGroup m:type="Bag(TCMBCommon-modelsModel.enqTcibAcctDetails_PortfolioNoMvGroup)">
<d:element>
<d:PortfolioNo></d:PortfolioNo>
</d:element>
</d:enqTcibAcctDetails_PortfolioNoMvGroup>
<d:enqTcibAcctDetails_ShortTitleMvGroup m:type="Bag(TCMBCommon-modelsModel.enqTcibAcctDetails_ShortTitleMvGroup)">
<d:element>
<d:Name>Rolf Gerling</d:Name>
</d:element>
</d:enqTcibAcctDetails_ShortTitleMvGroup>
<d:enqTcibAcctDetails_AccountTitle1MvGroup m:type="Bag(TCMBCommon-modelsModel.enqTcibAcctDetails_AccountTitle1MvGroup)">
<d:element>
<d:AcctName>Current Account</d:AcctName>
</d:element>
</d:enqTcibAcctDetails_AccountTitle1MvGroup>
</m:properties>
</content>
</entry>
我想直接获取嵌套元素"属性"。但是我无法实现。
我的pojo课程仅获得嵌套元素"属性"是
@XmlRootElement(name="properties", namespace =
"http://schemas.microsoft.com/ado/2007/08/dataservices/metadata")
@XmlAccessorType(XmlAccessType.FIELD)
class AccountResource {
@XmlElement(name = "Acc", namespace =
"http://schemas.microsoft.com/ado/2007/08/dataservices")
public String accountNumber;
@XmlElement(name = "AcctName")
public String accountName;
@XmlElement(name = "Type")
public String accountType;
@Nullable
@XmlElement(name = "OnlineActualBal")
public Float availableBalance;
@Nullable
@XmlElement(name = "Ccy")
public String currency;
@Nullable
@XmlElement(name = "Customer")
public String customerNumber;
@Nullable
@XmlElement(name = "AcctTransRights")
public Boolean transferRights;
好心地帮助我如何继续1.使用命名空间的元素可以注释元素的正确方法,因为我有两个或多个名称空间。2.我们必须使用@xmlelementwrapper进行这种
- 什么是使用名称空间注释元素的正确方法,因为我有两个或多个命名空间。
使用JAXB,您通常具有 java软件包 - xml名称空间映射,其中 xml名称空间是模式的主要/目标名称空间。在Java软件包中,您可以使用@XmlSchema
注释定义package-info.java
文件。例如:
@javax.xml.bind.annotation.XmlSchema(
namespace = "http://www.opengis.net/wmts/1.0",
elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package net.opengis.wmts.v_1_0;
这具有您不再需要在此软件包中其他注释中指定namespace
属性的优势。例如,如果定义:
@XmlElement(name = "UnitSymbol")
protected String unitSymbol;
这实际上定义了命名空间http://www.opengis.net/wmts/1.0
中的UnitSymbol
。由于大多数元素都将在目标名称空间中,这将为您节省很多键入。
但是,如果您碰巧有来自其他名称空间的元素(例如,通过xs:element/@ref
(,您仍然可以使用注释的namespace
属性来指定命名空间。例如:
@XmlElement(name = "UOM", namespace = "http://www.opengis.net/ows/1.1")
protected DomainMetadataType uom;
- 我们必须使用@xmlelementwrapper作为此类
在这种情况下,没有。您只会有类似的东西:
@XmlElement(name="properties")
private AccountResource properties;
就是这样。
如果您想要这样的结构:
,则需要@XmlElementWrapper
<m:properties>
<m:property>
<d:CategoryId>1001</d:CategoryId>
<d:Type>Current Account</d:Type>
<d:Acc>78239</d:Acc>
<d:Ccy>GBP</d:Ccy>
<!-- ... -->
</m:property>
<m:property>
<!-- ... -->
</m:property>
<!-- ... -->
</m:properties>
通常,我的建议是定义描述您XML结构的XML模式。然后,您可以从此架构中生成类。