【问题标题】:XSLT 1.0 Move child elements into new parent node and add value to empty nodeXSLT 1.0 将子元素移动到新的父节点并向空节点添加值
【发布时间】:2021-03-20 00:34:23
【问题描述】:

输入 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 完成此任务的任何想法?谢谢!

【问题讨论】:

  • 如果您能提供一个最小的可重现示例,那就太好了:(1)输入 XML。 (2) 你的逻辑,以及试图实现它的 XSLT。 (3) 期望的输出。 (4) XSLT 处理器及其版本。

标签: xml xslt-1.0


【解决方案1】:
 <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>

【讨论】:

  • 请不要应用仅代码的答案 - 添加一些描述以限定您的解决方案。
猜你喜欢
  • 2021-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-05
  • 2021-12-28
  • 1970-01-01
相关资源
最近更新 更多