gpt4 book ai didi

XSLT 1.0 分组子节点后跟某个节点

转载 作者:行者123 更新时间:2023-12-05 01:22:39 25 4
gpt4 key购买 nike

输入 xml:

<entry>
<text>
<p>xyz</p>
<p>xyz</p>
<p>xyz</p>
<p>xyz</p>
<author>abc</author>
<p>xyz</p>
<p>xyz</p>
<p>xyz</p>
<author>abc</author>
</text>
</entry>

我正在使用 XSLT 1.0。

我想全选<p>直到下一个元素 <author>元素并将它们(连同下一个 <author> 元素)分组到一个新的 <div> 下元素。所以预期的输出看起来像这样:

<entry>
<text>
<div>
<p>xyz</p>
<p>xyz</p>
<p>xyz</p>
<p>xyz</p>
<author>abc</author>
</div>
<div>
<p>xyz</p>
<p>xyz</p>
<p>xyz</p>
<author>abc</author>
</div>
</text>
</entry>

我试过这个解决方案:

<xsl:template match="entry">
<entry>
<text>
<div>
<xsl:apply-templates select="child::node()[not(preceding-sibling::author)]"/>
</div>
</text>
</entry>
</xsl:template>

对于 <p> 的第一组工作正常+ <author> ,但不适用于下一组。

如有任何帮助,我将不胜感激。

最佳答案

您可以在作者之前对所有元素进行分组(preceding-sibling:* 不是作者 (name() != 'author') 并且具有当前作者作为下一位作者(generate-id(following-sibling::author[1]) = generate-id(current())):

preceding-sibling::*[ name() != 'author' and
generate-id( following-sibling::author[1]) = generate-id(current()) ]

尝试这样的事情:

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*" />
<xsl:output method="xml" indent="yes"/>


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

<xsl:template match="text">
<xsl:copy>
<xsl:apply-templates select="author" mode="adddiv"/>
</xsl:copy>
</xsl:template>

<xsl:template match="author" mode="adddiv" >
<!-- preceding siblings not author -->
<xsl:variable name="fs" select="preceding-sibling::*[ name() != 'author' and
generate-id( following-sibling::author[1]
) = generate-id(current()) ]" />

<div >
<xsl:apply-templates select="$fs | ." />
</div>
</xsl:template>
</xsl:stylesheet>

这将生成以下输出:

<entry>
<text>
<div>
<p>xyz</p>
<p>xyz</p>
<p>xyz</p>
<p>xyz</p>
<author>abc</author>
</div>
<div>
<p>xyz</p>
<p>xyz</p>
<p>xyz</p>
<author>abc</author>
</div>
</text>
</entry>

关于XSLT 1.0 分组子节点后跟某个节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17106102/

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