XSL:无需复制即可“移动”后继兄弟

母亲们

鉴于XML:

<root>
    <txto>Header text<txto>
    <txt>more paragraph text</txt>
    <txt>even more paragraph text</txt>
    <txto>Another header<txto>
    <txt> … </txt>
    <txt> … </txt>
</root>

所需的输出是让第一个标头定义一个节,而保留第二个标头:

<root>
    <n1>
        <o>Header text</o>
        <txt>more paragraph text</txt>
        <txt>even more paragraph text</txt>
    </n1>
    <txto>Another header<txto>
    <txt> … </txt>
    <txt> … </txt>
</root>

使用XSL:

<xsl:template match=“//txto[starts-with(., ‘Header’)]”>
        
    <n1>
        <o><xsl:value-of select="."/></o>
        <xsl:apply-templates select="following-sibling::txt" />
    
    </n1>
    
</xsl:template>
    
    

但是,结果是txt元素“重复”:

<root>
    <n1>
        <o>Header text</o>
        <txt>more paragraph text</txt>
        <txt>even more paragraph text</txt>
    </n1>
    <txt>more paragraph text</txt>       <-- 'duplicated'
    <txt>even more paragraph text</txt>  <-- 'duplicated'
    <txto>Another header<txto>
    <txt> … </txt>
    <txt> … </txt>
</root>

这可能与已经将所有txt节点复制到结果树的Identity转换有关:

<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()" />
    </xsl:copy>
</xsl:template>

如何避免将两个“重复的” txt节点复制到结果树?我只希望它们在n1节点内,而不是紧随其后。

michael.hor257k

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:strip-space elements="*"/>

<xsl:key name="following-txt" match="txt" use="generate-id(preceding-sibling::txto[1])" />

<xsl:template match="/root">
    <xsl:copy>
        <xsl:apply-templates select="txto"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="txto[starts-with(., 'Header')]">
    <n1>
        <o>
            <xsl:value-of select="." />
        </o>
        <xsl:copy-of select="key('following-txt', generate-id())"/>
    </n1>
</xsl:template>

<xsl:template match="txto">
    <xsl:copy-of select=". | key('following-txt', generate-id())"/>
</xsl:template>

</xsl:stylesheet>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

移动,复制分配,复制构造函数似乎无需定义即可工作

来自分类Dev

无需模板即可复制目录

来自分类Dev

无需复制数组即可替代numpy roll

来自分类Dev

SFTP无需下载即可复制远程文件

来自分类Dev

移动图像而无需复制/粘贴

来自分类Dev

无需单击即可在屏幕上随机移动按钮

来自分类Dev

无需单击即可使用触摸屏移动鼠标

来自分类Dev

无需先升级即可移动和升级 mediawiki

来自分类Dev

无需复制即可查看视频文件的权限

来自分类Dev

Ubuntu gawk无需修改即可复制第一行

来自分类Dev

无需复制即可交换两个 SEXP

来自分类Dev

XSLT-分析后继兄弟

来自分类Dev

在pygame中移动角色而无需重复复制图像

来自分类Dev

在pygame中移动角色而无需重复复制图像

来自分类Dev

C-无需使用int即可更快速地移动数组的方法

来自分类Dev

批处理-无需登录即可将文件移动到网络驱动器

来自分类Dev

Emacs Windmove无需切换即可移动缓冲区

来自分类Dev

无需移动服务即可将图像上传到Azure Blob存储的体系结构

来自分类Dev

如何使 SemanticUI 下拉菜单无需悬停(在移动设备上)即可工作?

来自分类Dev

结构化绑定无需复制即可获取子向量的连续元素

来自分类Dev

无需完全同步即可复制S3文件的最快方法

来自分类Dev

无需定义表架构即可将其复制到Snowflake表中

来自分类Dev

无需复制即可将多个向量累积到单个容器中

来自分类Dev

无需复制/粘贴即可执行单元格值修改-VBA

来自分类Dev

无需鼠标选择即可将当前行复制到光标下方的剪贴板

来自分类Dev

无需密码即可登录

来自分类Dev

无需密码即可登录

来自分类Dev

单击即可移动按钮

来自分类Dev

XSL检查之前的同级兄弟

Related 相关文章

热门标签

归档