gpt4 book ai didi

xml - xsl - 根据 2 个节点之间的属性对节点进行分组

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

在 XSL 1.0 中,我进行了一次搜索并发现了围绕分组的类似项,但我认为这略有不同。 很抱歉,如果这已经涵盖了,我无法找到答案

输入

<?xml version="1.0"?>
<xmldoc>
<section paragraphMarker="true">Part 1. </section>
<section paragraphMarker="false">Part 2. </section>
<section paragraphMarker="false">Part 3. </section>
<section paragraphMarker="true">Part 4. </section>
<section paragraphMarker="true">Part 5. </section>
<section paragraphMarker="false">Part 6. </section>
</xmldoc>

期望的输出

<p>Part 1. Part 2. Part 3.</p>
<p>Part 4. </p>
<p>Part 5. Part 6. </p>

我尝试了以下方法:-

<xsl:key name="sectionsWithParagraphMarker" 
match="section[@paragraphMarker='true']" use="."/>

<xsl:template match="/">
<xsl:for-each select=
"/xmldoc/section[generate-id()
=
generate-id(key('sectionsWithParagraphMarker',.)[1])]">
<p>
<xsl:apply-templates select="."/>
<xsl:apply-templates select="./following-sibling::node()
[count(. | /xmldoc/section[@paragraphMarker='true'][1]/
preceding-sibling::node())
=
count(/xmldoc/section[@paragraphMarker='true'][1]/
preceding-sibling::node())
]"/>
</p>
</xsl:for-each>
</xsl:template>

<xsl:template match="section">
<xsl:select value-of="."/>
</xsl:template>

这行不通,我一直坚持下去。它为所有组选择了太多的“部分”节点。任何帮助将不胜感激!

最佳答案

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="section">
<xsl:if test="@paragraphMarker='true'">
<p>
<xsl:apply-templates select="." mode="text" />
</p>
</xsl:if>
</xsl:template>

<xsl:template match="section" mode="text">
<xsl:value-of select="." />
<xsl:apply-templates select="following-sibling::section[1][@paragraphMarker='false']" mode="text" />
</xsl:template>
</xsl:stylesheet>

由于这段代码只向前看,所以它比回溯的解决方案更有效(在许多实现中,向后的 XPath 轴很慢)。

关于xml - xsl - 根据 2 个节点之间的属性对节点进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5608190/

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