#xml #xslt-1.0
#xml #xslt-1.0
Вопрос:
Ввод XML
<Location>
<AdditionalInterest>
<GeneralPartyInfo>
<NameInfo>
<CommercialName>munmun</CommercialName>
</NameInfo>
<Addr>
<Addr1>1234 Oak Street</Addr1>
<City>Waterville</City>
<StateProvCd>ME</StateProvCd>
</Addr>
</GeneralPartyInfo>
<AdditionalInterestInfo>
<NatureInterestCd>Loss Payee</NatureInterestCd>
</AdditionalInterestInfo>
<GeneralPartyInfo>
<NameInfo>
<CommercialName>jaan</CommercialName>
</NameInfo>
<Addr>
<Addr1>555 Park Avenue</Addr1>
<City>Waterville</City>
<StateProvCd>ME</StateProvCd>
</Addr>
</GeneralPartyInfo>
<AdditionalInterestInfo>
<NatureInterestCd>Mortgage Holder</NatureInterestCd>
</AdditionalInterestInfo>
</AdditionalInterest>
</Location>
Желаемый выходной XML
<Location>
<AdditionalInterest>
<GeneralPartyInfo>
<NameInfo>
<CommercialName>munmun</CommercialName>
</NameInfo>
<Addr>
<Addr1>1234 Oak Street</Addr1>
<City>Waterville</City>
<StateProvCd>ME</StateProvCd>
</Addr>
</GeneralPartyInfo>
<AdditionalInterestInfo>
<NatureInterestCd>Loss Payee</NatureInterestCd>
</AdditionalInterestInfo>
</AdditionalInterest>
<AdditionalInterest>
<GeneralPartyInfo>
<NameInfo>
<CommercialName>jaan</CommercialName>
</NameInfo>
<Addr>
<Addr1>555 Park Avenue</Addr1>
<City>Waterville</City>
<StateProvCd>ME</StateProvCd>
</Addr>
</GeneralPartyInfo>
<AdditionalInterestInfo>
<NatureInterestCd>Mortgage Holder</NatureInterestCd>
</AdditionalInterestInfo>
</AdditionalInterest>
</Location>
Мне нужно создать отдельные дополнительные родительские узлы, каждый с дочерними узлами GeneralPartyInfo и
AdditionalInterestInfo, как показано в желаемом выходном XML выше. Есть идеи о том, как это сделать с помощью XSLT 1.0? Спасибо!
Ответ №1:
Если можно предположить, что за каждым GeneralPartyInfo
сразу следует ровно один AdditionalInterestInfo
, то вы могли бы сделать:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/Location">
<xsl:copy>
<xsl:for-each select="AdditionalInterest/GeneralPartyInfo">
<AdditionalInterest>
<xsl:copy-of select=". | following-sibling::AdditionalInterestInfo[1]"/>
</AdditionalInterest>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>