gpt4 book ai didi

xml - XSLT:棘手的转换,建议?

转载 作者:数据小太阳 更新时间:2023-10-29 02:23:11 25 4
gpt4 key购买 nike

我必须构建一个像这样转换 xml 的 XSLT 样式表:

<message>
<line/>
<silence/>
<dot/><line/><line/>
<silence/>
<dot/>
<silence/>
<line/><dot/><dot/><dot/>
</message>

像这样:

<complexMessage> 
<word code="-"/>
<word code=".--"/>
<word code="."/>
<word code="-..."/>
</complexMessage>

(注意每个 word 元素是如何在 silence 元素之后关闭的)

我该怎么做?

最佳答案

这个解决方案既:稍微短一些,更重要的是,由于使用 key ,效率更高:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>

<xsl:key name="kPhraseByMorse"
match="*[not(self::silence) and not(self::message)]"
use="generate-id(preceding-sibling::silence[1])"/>

<xsl:template match="/">
<complexMessage>
<word>
<xsl:call-template name="makeCode"/>
</word>

<xsl:apply-templates select="*/silence"/>
</complexMessage>
</xsl:template>

<xsl:template match="silence">
<word>
<xsl:call-template name="makeCode">
<xsl:with-param name="pId" select="generate-id()"/>
</xsl:call-template>
</word>
</xsl:template>

<xsl:template name="makeCode">
<xsl:param name="pId"/>
<xsl:attribute name="code">
<xsl:apply-templates select="key('kPhraseByMorse', $pId)"/>
</xsl:attribute>
</xsl:template>

<xsl:template match="dot">.</xsl:template>
<xsl:template match="line">-</xsl:template>
</xsl:stylesheet>

将此转换应用于提供的源 XML 时,会生成正确的结果:

<complexMessage>
<word code="-"/>
<word code=".--"/>
<word code="."/>
<word code="-..."/>
</complexMessage>

关于xml - XSLT:棘手的转换,建议?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1318270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com