XSLT 1.0 将子元素移动到新的父节点并向空节点添加值
XSLT 1.0 Move child elements into new parent node and add value to empty node
输入XML
<Location>
<LocationNumber>1</LocationNumber>
<SublocationNumber>1</SublocationNumber>
<Construction>
<YearBuilt>2018</YearBuilt>
</Construction>
<AdditionalInterest>
<GeneralPartyInfo>
<NameInfo>
<CommercialName>Joe Smith</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>Susan Jones</CommercialName>
</NameInfo>
<Addr>
<Addr1>555 Park Avenue</Addr1>
<City>Waterville</City>
<StateProvCd/>
</Addr>
</GeneralPartyInfo>
<AdditionalInterestInfo>
<NatureInterestCd>Mortgage Holder</NatureInterestCd>
</AdditionalInterestInfo>
<GeneralPartyInfo>
<NameInfo>
<CommercialName>PNC Bank</CommercialName>
</NameInfo>
<Addr>
<Addr1>2000 Money Street</Addr1>
<City>Mason</City>
<StateProvCd/>
</Addr>
</GeneralPartyInfo>
<AdditionalInterestInfo>
<NatureInterestCd>Additional Interest</NatureInterestCd>
</AdditionalInterestInfo>
</AdditionalInterest>
</Location>
期望的输出XML
<Location>
<LocationNumber>1</LocationNumber>
<SublocationNumber>1</SublocationNumber>
<Construction>
<YearBuilt>2018</YearBuilt>
</Construction>
<AdditionalInterest>
<GeneralPartyInfo>
<NameInfo>
<CommercialName>Joe Smith</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>Susan Jones</CommercialName>
</NameInfo>
<Addr>
<Addr1>555 Park Avenue</Addr1>
<City>Waterville</City>
<StateProvCd>ZZ</StateProvCd>
</Addr>
</GeneralPartyInfo>
<AdditionalInterestInfo>
<NatureInterestCd>Mortgage Holder</NatureInterestCd>
</AdditionalInterestInfo>
</AdditionalInterest>
<AdditionalInterest>
<GeneralPartyInfo>
<NameInfo>
<CommercialName>PNC Bank</CommercialName>
</NameInfo>
<Addr>
<Addr1>2000 Money Street</Addr1>
<City>Mason</City>
<StateProvCd>ZZ</StateProvCd>
</Addr>
</GeneralPartyInfo>
<AdditionalInterestInfo>
<NatureInterestCd>Additional Interest</NatureInterestCd>
</AdditionalInterestInfo>
</AdditionalInterest>
</Location>
我需要创建单独的 AdditionalInterest 父节点,每个节点都有子节点 GeneralPartyInfo 和 AdditionalInterestInfo,如上面所需的输出 XML 所示。此外,如果 StateProvCd 节点为空,则添加默认值 ZZ。关于如何使用 XSLT 1.0 完成此操作的任何想法?谢谢!
<xsl:template match="AdditionalInterest">
<xsl:apply-templates select="GeneralPartyInfo"/>
</xsl:template>
<xsl:template match="GeneralPartyInfo">
<xsl:element name="AdditionalInterest">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
<xsl:apply-templates select="following-sibling::AdditionalInterestInfo[1]"/>
</xsl:element>
</xsl:template>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
输入XML
<Location>
<LocationNumber>1</LocationNumber>
<SublocationNumber>1</SublocationNumber>
<Construction>
<YearBuilt>2018</YearBuilt>
</Construction>
<AdditionalInterest>
<GeneralPartyInfo>
<NameInfo>
<CommercialName>Joe Smith</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>Susan Jones</CommercialName>
</NameInfo>
<Addr>
<Addr1>555 Park Avenue</Addr1>
<City>Waterville</City>
<StateProvCd/>
</Addr>
</GeneralPartyInfo>
<AdditionalInterestInfo>
<NatureInterestCd>Mortgage Holder</NatureInterestCd>
</AdditionalInterestInfo>
<GeneralPartyInfo>
<NameInfo>
<CommercialName>PNC Bank</CommercialName>
</NameInfo>
<Addr>
<Addr1>2000 Money Street</Addr1>
<City>Mason</City>
<StateProvCd/>
</Addr>
</GeneralPartyInfo>
<AdditionalInterestInfo>
<NatureInterestCd>Additional Interest</NatureInterestCd>
</AdditionalInterestInfo>
</AdditionalInterest>
</Location>
期望的输出XML
<Location>
<LocationNumber>1</LocationNumber>
<SublocationNumber>1</SublocationNumber>
<Construction>
<YearBuilt>2018</YearBuilt>
</Construction>
<AdditionalInterest>
<GeneralPartyInfo>
<NameInfo>
<CommercialName>Joe Smith</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>Susan Jones</CommercialName>
</NameInfo>
<Addr>
<Addr1>555 Park Avenue</Addr1>
<City>Waterville</City>
<StateProvCd>ZZ</StateProvCd>
</Addr>
</GeneralPartyInfo>
<AdditionalInterestInfo>
<NatureInterestCd>Mortgage Holder</NatureInterestCd>
</AdditionalInterestInfo>
</AdditionalInterest>
<AdditionalInterest>
<GeneralPartyInfo>
<NameInfo>
<CommercialName>PNC Bank</CommercialName>
</NameInfo>
<Addr>
<Addr1>2000 Money Street</Addr1>
<City>Mason</City>
<StateProvCd>ZZ</StateProvCd>
</Addr>
</GeneralPartyInfo>
<AdditionalInterestInfo>
<NatureInterestCd>Additional Interest</NatureInterestCd>
</AdditionalInterestInfo>
</AdditionalInterest>
</Location>
我需要创建单独的 AdditionalInterest 父节点,每个节点都有子节点 GeneralPartyInfo 和 AdditionalInterestInfo,如上面所需的输出 XML 所示。此外,如果 StateProvCd 节点为空,则添加默认值 ZZ。关于如何使用 XSLT 1.0 完成此操作的任何想法?谢谢!
<xsl:template match="AdditionalInterest">
<xsl:apply-templates select="GeneralPartyInfo"/>
</xsl:template>
<xsl:template match="GeneralPartyInfo">
<xsl:element name="AdditionalInterest">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
<xsl:apply-templates select="following-sibling::AdditionalInterestInfo[1]"/>
</xsl:element>
</xsl:template>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>