domanda semplificato: Qual è il XPath per selezionare tutti i nodi XML con un attributo che termina con la stringa "Notifica". La prima e la terza nodi in questo frammento:Selezione nodi con XPath per associazione di un sottoinsieme di classi con JAXB
<events>
<event name="CreatedNotification" />
<event name="InfoLog" />
<event name="UpdatedNotification" />
</events>
Domanda dettagliata:
voglio selezionare più complexTypes da uno schema XSD per il legame con JAXB. Questo funziona per una singola classe: OrderStateChangeNotification
<jxb:bindings schemaLocation="apiv2.xsd">
<jxb:bindings node="//xs:complexType[@name='OrderStateChangeNotification']">
<inheritance:implements>com.google.checkout.sdk.notifications.Notification</inheritance:implements>
</jxb:bindings>
</jxb:bindings>
Ecco il frammento di rilevante dal file di schema di schema:
<xs:complexType name="OrderStateChangeNotification">
<xs:all>
<xs:element name="new-fulfillment-order-state" type="tns:FulfillmentOrderState" />
<xs:element name="new-financial-order-state" type="tns:FinancialOrderState" />
<xs:element name="previous-fulfillment-order-state" type="tns:FulfillmentOrderState" />
<xs:element name="previous-financial-order-state" type="tns:FinancialOrderState" />
<xs:element name="reason" type="xs:string" minOccurs="0" />
<xs:element name="timestamp" type="xs:dateTime" />
<xs:element name="google-order-number" type="xs:token" />
<xs:element name="order-summary" type="tns:OrderSummary" minOccurs="0" />
</xs:all>
<xs:attribute name="serial-number" type="xs:string" use="required" />
</xs:complexType>
<xs:complexType name="ChargeAmountNotification">
<xs:all>
<xs:element name="timestamp" type="xs:dateTime" />
<xs:element name="latest-charge-amount" type="tns:Money" />
<xs:element name="latest-charge-fee" type="tns:FeeStructure" minOccurs="0" />
<xs:element name="total-charge-amount" type="tns:Money" />
<xs:element name="latest-promotion-charge-amount" type="tns:Money" minOccurs="0" />
<xs:element name="google-order-number" type="xs:token" />
<xs:element name="order-summary" type="tns:OrderSummary" minOccurs="0" />
</xs:all>
<xs:attribute name="serial-number" type="xs:string" use="required" />
</xs:complexType>
Voglio che il legame di applicare a tutti gli oggetti di notifica. Tutti end con "notifica"
Ho provato a cambiare il XPath da
//xs:complexType[@name='OrderStateChangeNotification']
a
//xs:complexType[substring(name(), string-length(name()) - 12) = 'Notification']
ma non ha funzionato.
Un altro approccio è provare e selezionare tutti i nodi con "riepilogo dell'ordine" e "numero di serie" per i bambini, poiché so che solo gli oggetti di notifica hanno questi.
UPDATE: La soluzione da @Lee Greco Selectes correttamente i nodi che volevo, ma purtroppo, il plugin eredità non è compatibile con più nodi:
[ERROR] XPath evaluation of "//xs:complexType[substring(@name, string-length(@name)-string-length('Notification')+1)='Notification']" results in too many (8) target nodes
ho finito per enumerare separatamente.
Al fine di sostenere "molteplici nodi", utilizzare il 'multipla = impostazione "true" su ' '. Vedi la [discussione qui] (http://java.net/projects/jaxb/lists/users/archive/2011-04/message/11) –
L'ultima voce nella [discussione] (http://java.net/projects/jaxb/lists/users/archive/2011-04/message/11) afferma ancora che non funziona. Ho lo stesso problema e sebbene siano accettate multiple = true e required = false, jaxb soffoca ancora su "La valutazione XPath di" // xs: complexType "risulta in troppi (3) nodi di destinazione" .. – whaefelinger