如何使用xslt将大量孤立标记放入其他标记中
我有一些成串的标签,没有放在任何标签上。 但我需要把它放在标签里,直到下一个序列标签出现 我也尝试过同样的方法,但是每个孤立标签都会被放置在不同的部分,这并不像预期的那样 输入Xml:如何使用xslt将大量孤立标记放入其他标记中,xslt,Xslt,我有一些成串的标签,没有放在任何标签上。 但我需要把它放在标签里,直到下一个序列标签出现 我也尝试过同样的方法,但是每个孤立标签都会被放置在不同的部分,这并不像预期的那样 输入Xml: <title>Info111</title> <ul> underline<ul> <li>list</li> <serial> <em>this is for em</em> <ti
<title>Info111</title>
<ul> underline<ul>
<li>list</li>
<serial>
<em>this is for em</em>
<title>serial title</title>
</serial>
<title>Info2222</title>
<ul> underline2222<ul>
<li>li for list</li>
Info111
下划线
- 名单
这是给他们的
连载标题
资讯2222
下划线222
- 李为名单
我的xslt代码:
<xsl:variable name='list' select='//serial'/>
<xsl:template match='/'>
<xsl:for-each select='$list'>
<xsl:element name='serial'>
<xsl:apply-templates select='*[not(name(.)="serial")]'/>
</xsl:element>
</xsl:for-each>
</xsl:template>
实际产量
:
<serial>
<title>Info111</title>
</serial>
<serial>
<ul> underline<ul>
</serial>
<serial>
<li>list</li>
</serial>
<serial>
<em>this is for em</em>
<title>serial title</title>
</serial>
<serial>
<title>Info2222</title>
</serial>
<serial>
<ul> underline2222<ul>
</serial>
<serial>
<li>li for list</li>
</serial>
:
信息111
下划线
- 名单
这是给他们的
连载标题
资讯2222
下划线222
- 李为名单
预期产出:
<serial>
<title>Info111</title>
<ul> underline<ul>
<li>list</li>
</serial>
<serial>
<em>this is for em</em>
<title>serial title</title>
</serial>
<serial>
<title>Info2222</title>
<ul> underline2222<ul>
<li>li for list</li>
</serial>
信息111
下划线
- 名单
这是给他们的
连载标题
资讯2222
下划线222
- 李为名单
请帮我解决这个问题如果你使用正确的术语,对每个人都有帮助。我认为“标签”的意思可能是“元素”。(图元实际上有两个标记,一个开始标记和一个结束标记)。起初我不知道你所说的“束”是什么意思,但通过研究你的例子,我认为你指的是“组” 您显示的输入不是完整的文档。在格式良好的XML中,始终存在根元素。所以我不知道“孤立标记”是什么意思——格式良好的XML中的每个元素都有一个父节点 当我们讨论您的问题时,如果您在问题上添加“XSLT 1.0”或“XSLT 2.0”或“XSLT 3.0”标记(“StackOverflow意义上的标记”,而不是XML意义上的标记”),这将帮助每个人解决XSLT问题,因为这通常会影响答案 显示的XSLT代码仅处理$list中的元素,即名为“serial”的元素。所以我不知道如何得到包含例如Info111和Info222的输出 这方面的XSLT 2.0代码是:
<xsl:for-each-group select="*" group-adjacent="boolean(self::serial)">
<xsl:choose>
<xsl:when test="self::serial">
<xsl:copy-of select="current-group()"/>
</xsl:when>
<xsl:otherwise>
<serial><xsl:copy-of select="current-group()"/></serial>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
谢谢您的回复!
现在,它可以很好地使用下面的代码
<xsl:template match="content/body">
<xsl:for-each-group select="*" group-adjacent="boolean(self::serial)">
<xsl:choose>
<xsl:when test="self::serial">
<xsl:copy-of select="current-group()"/>
</xsl:when>
<xsl:otherwise>
<serial><xsl:copy-of select="current-group()"/></serial>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</xsl:template>
我得到了预期的结果:)您可以使用哪个XSLT版本?XSLT 2.0版本请帮助我解决这个问题,谢谢您的回复!是的,您是对的,每个标记都有xml中的父标记,但这里的孤立标记是指不在序列标记下的标记。我的xml是:Info111underline- 列表
这是用于em序列标题Info2222underline2222- 列表
当我尝试您的解决方案时。我得到以下错误:样式表中的这个位置不允许使用xsl:for-each-group!我的输出与输入xml相同。未反映任何更改
xsl:对于每个组
都是一条指令,它需要进入模板规则中。