/ / Jak mogę uzyskać wszystkie wartości z zagnieżdżonego xml? - xml, xslt, wso2, wso2esb, xpath-2.0

Jak mogę uzyskać wszystkie wartości z zagnieżdżonego xml? - xml, xslt, wso2, wso2esb, xpath-2.0

Otrzymuję odpowiedź podobną do tego, gdzie jestemuzyskanie wielu kontraktów wewnątrz umów. W odpowiedzi może pojawić się 4 lub 3 lub 5 kontraktów. Chcę uzyskać wartości wszystkich ContractStartDate w każdej umowie.

<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>

EDYTOWAĆ Chcę się jak poniżej:

<Dates>
<ContractStartDate>2015-01-01+01:00</ContractStartDate>
<ContractStartDate>2017-01-01+01:00</ContractStartDate>
<ContractStartDate>2017-01-01+01:00</ContractStartDate>
</Dates

Jak mogę uzyskać wszystkie wartości każdego ContractStartDate w wso2 esb za pomocą xpath lub xslt lub skryptu dowolnego rozwiązania?

Odpowiedzi:

1 dla odpowiedzi № 1

Ponieważ nie określiłeś swoich oczekiwanych wyników, dostarczę ci XPATH rozwiązanie do pobrania <ContractStartDate> węzły z twojego pliku:

Wkład:

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: -> dostęp do wszystkich ContractStartDate węzły w drzewie 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: -> dostęp do wszystkich ContractStartDate pole tekstowe węzłów w drzewie 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

po jeśli musisz sformatować dane wyjściowe, jak chcesz, możesz użyć tego konkretnego XPATH w Twoim XSLT arkusz stylów

Jeśli chcesz osiągnąć zdefiniowane dane wyjściowe, musisz użyć poniższych 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>

Na Twoim wejściu produkuje:

$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>