Sto ottenendo una risposta come seguire dove sonoottenere più contratti all'interno dei contratti. Ci potrebbero essere 4 o 3 o 5 contratti in una risposta. Voglio ottenere i valori di tutti i ContractStartDate in ogni contratto.
<Contracts xmlns="http://www.ggmd.nl/data/service/kpicontract">
<Contract>
<ContractStartDate>2015-01-01+01:00</ContractStartDate>
<ContractEndDate>2015-01-10+01:00</ContractEndDate>
<ContractSubject>02 - 0H304</ContractSubject>
</Contract>
<Contract>
<ContractStartDate>2017-01-01+01:00</ContractStartDate>
<ContractEndDate>2017-01-10+01:00</ContractEndDate>
<ContractSubject>02 - 0H304</ContractSubject>
</Contract>
<Contract>
<ContractStartDate>2017-01-01+01:00</ContractStartDate>
<ContractEndDate>2017-01-10+01:00</ContractEndDate>
<ContractSubject>02 - 0H304</ContractSubject>
</Contract>
</Contracts>
MODIFICARE Voglio uscire come segue:
<Dates>
<ContractStartDate>2015-01-01+01:00</ContractStartDate>
<ContractStartDate>2017-01-01+01:00</ContractStartDate>
<ContractStartDate>2017-01-01+01:00</ContractStartDate>
</Dates
Come posso ottenere tutti i valori di ogni ContractStartDate in wso2 esb usando xpath o xslt o script qualsiasi soluzione possibile?
risposte:
1 per risposta № 1Dato che non hai specificato l'output atteso, ti fornirò un XPATH
soluzione per recuperare il <ContractStartDate>
nodi dal tuo file:
Ingresso:
more contracts.xml
<Contracts xmlns="http://www.ggmd.nl/data/service/kpicontract">
<Contract>
<ContractStartDate>2015-01-01+01:00</ContractStartDate>
<ContractEndDate>2015-01-10+01:00</ContractEndDate>
<ContractSubject>02 - 0H304</ContractSubject>
</Contract>
<Contract>
<ContractStartDate>2017-01-01+01:00</ContractStartDate>
<ContractEndDate>2017-01-10+01:00</ContractEndDate>
<ContractSubject>02 - 0H304</ContractSubject>
</Contract>
<Contract>
<ContractStartDate>2017-01-01+01:00</ContractStartDate>
<ContractEndDate>2017-01-10+01:00</ContractEndDate>
<ContractSubject>02 - 0H304</ContractSubject>
</Contract>
</Contracts>
XPATH1: -> accesso a tutti ContractStartDate
nodi nella struttura DOM XML
/*[local-name()="Contracts"]/*[local-name()="Contract"]/*[local-name()="ContractStartDate"]
OUTPUT1:
<ContractStartDate>2015-01-01+01:00</ContractStartDate><ContractStartDate>2017-01-01+01:00</ContractStartDate><ContractStartDate>2017-01-01+01:00</ContractStartDate>
XPATH2: -> accesso a tutti ContractStartDate
campo di testo dei nodi nella struttura DOM XML
/*[local-name()="Contracts"]/*[local-name()="Contract"]/*[local-name()="ContractStartDate"]/text()
OUTPUT2:
2015-01-01+01:002017-01-01+01:002017-01-01+01:00
dopo se hai bisogno di formattare l'output come vuoi puoi usare questo specifico XPATH
nel tuo XSLT
foglio di stile
Se si desidera raggiungere l'output definito, è necessario utilizzare quanto segue XSLT
:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:redirect="http://xml.apache.org/xalan/redirect" extension-element-prefixes="redirect" xmlns:xalan="http://xml.apache.org/xslt" exclude-result-prefixes="xalan">
<xsl:output method="xml" indent="yes" xalan:indent-amount="4"/>
<xsl:strip-space elements="*" />
<xsl:template match="/">
<dates>
<xsl:for-each select="/*[local-name()="Contracts"]/*[local-name()="Contract"]/*[local-name()="ContractStartDate"]">
<ContractStartDate>
<xsl:value-of select="." />
</ContractStartDate>
</xsl:for-each>
</dates>
</xsl:template>
</xsl:stylesheet>
Al tuo input produce:
$xsltproc contracts.xslt contracts.xml
<?xml version="1.0"?>
<dates>
<ContractStartDate>2015-01-01+01:00</ContractStartDate>
<ContractStartDate>2017-01-01+01:00</ContractStartDate>
<ContractStartDate>2017-01-01+01:00</ContractStartDate>
</dates>