【发布时间】:2022-09-23 23:48:28
【问题描述】:
我有一个如下的 XML:
<Main>
<rFs>
<rF>
<iT>T</iT>
<ref>F1</ref>
<recs>
<rec>
<iT>T</iT>
<ref>T0</ref>
<cT Code=\"R\" Des=\"Regular\">R</cT>
<fT Code=\"N\" Description=\"National\">N</fT>
<st Code=\"D\" Description=\"Dock\">D</st>
</rec>
<rec>
<iT>T</iT>
<ref>T0</ref>
<cT Code=\"R\" Description=\"Regular\">R</cT>
<fT Code=\"Q\" Description=\"Mad\">Q</fT>
</rec>
</recs>
</rF>
<rF>
<iT>T</iT>
<ref>F2</ref>
<recs>
<rec>
<iT>T</iT>
<ref>T1</ref>
<cT Code=\"S\" Des=\"Regular\">R</cT>
<fT Code=\"N\" Description=\"Inter\">I</fT>
</rec>
<rec>
<iT>T</iT>
<ref>T1</ref>
<cT Code=\"S\" Description=\"Time\">R</cT>
<fT Code=\"Q\" Description=\"Mad\">Q</fT>
</rec>
</recs>
</rF>
</rFs>
</Main>
根据要求,已经有一个 XSLT。 XSLT 如下:
<xsl:template match=\"Main\">
<rFs>
<xsl:for-each select=\"rFs/rF[iT = \'T\']\">
<rF>
<xsl:attribute name=\"id\">
<xsl:value-of select=\"concat(ref,\'_\',\'fam\')\"/>
</xsl:attribute>
<recs>
<xsl:for-each-group select=\"recs/rec\" group-by=\"ref\">
<xsl:for-each select=\"current-group()\">
<rec>
<xsl:attribute name=\"id\">
<xsl:value-of select=\"ref\"/>
</xsl:attribute>
<st>
<xsl:value-of select=\"st/@Code\"/>
</st>
</rec>
</xsl:for-each>
</xsl:for-each-group>
</recs>
</rF>
</xsl:for-each>
</rFs>
</xsl:template>
上面的 XSLT 给出了以下 XML 作为输出 -
<rFs>
<rF id=\"F1_fam\">
<recs>
<rec id=\"T0\">
<st>D</st>
</rec>
<rec id=\"T0\">
<st/>
</rec>
</recs>
</rF>
<rF id=\"F2_fam\">
<recs>
<rec id=\"T1\">
<st/>
</rec>
<rec id=\"T1\">
<st/>
</rec>
</recs>
</rF>
</rFs>
现在我必须在上面的XSLT 中进行更新。
我的要求是:
-
- 删除
<rec>其中<st>为空 - 如果
<rf>下的所有<rec>都将<st>设为null,则删除整个<rf>
- 如果
- 删除
上述要求的实现应生成最终 XML:
<rFs>
<rF id=\"F1_fam\">
<recs>
<rec id=\"T0\">
<st>D</st>
</rec>
</recs>
</rF>
</rFs>
我已经阅读了很多关于相同的帖子,但似乎没有任何效果。
-
哪个版本的 XSLT? XSLT 3 有
xsl:where-populatedw3.org/TR/xslt-30/#where-populated。
标签: xslt