簡體   English   中英

XSLT根據標簽內容值轉換XML

[英]XSLT to transform XML based on tag content value

我想編寫一個可以轉換XML的XSLT,如下所示:

<Companies>
  <Company>
    <CompanyId>1</CompanyId>
    <CompanyType>1</CompanyType>
  </Company>
  <Company>
    <CompanyId>2</CompanyId>
    <CompanyType>2</CompanyType>
    <ParentCompanyId>1</ParentCompanyId>
  </Company>
</Companies>

變成這樣的XML:

<Companies>
  <Company>
    <CompanyId>1</CompanyId>
    <CompanyType>1</CompanyType>
    <Company>
      <CompanyId>2</CompanyId>
      <CompanyType>2</CompanyType>
    </Company>
  </Company>
</Companies>

我該怎么做?

(之所以包含公司類型,是因為我可以直接從中得出節點的深度,這意味着深度為X的所有Company節點的類型都為Y)

使用選擇當前公司的子公司很容易做到。 這對於任何深度的嵌套都可以遞歸工作。 不需要CompanyType

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:key name="child-by-parent" match="Company" use="ParentCompanyId" />

<xsl:template match="/Companies">
     <xsl:copy>
        <!-- select progenitors -->
        <xsl:apply-templates select="Company[not(ParentCompanyId)]" />
    </xsl:copy>
</xsl:template>

<xsl:template match="Company">
    <xsl:copy>
        <xsl:copy-of select="CompanyId | CompanyType"/>
        <!-- select children -->
        <xsl:apply-templates select="key('child-by-parent', CompanyId)"/> 
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM