gpt4 book ai didi

xslt - 匹配 XSLT 中的空格分隔值

转载 作者:行者123 更新时间:2023-12-04 05:17:48 26 4
gpt4 key购买 nike

项目的属性在@properties 属性中以空格分隔的术语列出。还有一个主要的属性列表。

<t>

<items>
<item id='a' properties='red little' />
<item id='b' properties='big strong heavy' />
<item id='c' properties='blue heavy' >
</items>

<properties>
<property id='red' />
<property id='little' />
<property id='blue' />
</properties>

</t>

我的问题:使用 XLST 1.0,为模板编写匹配属性,该属性将匹配在主属性列表中至少具有一个属性的所有项目。

项目 a 和 c 将匹配。 b 项不会。

它是 XSLT 1.0,所以我不能使用 str:split。也许是带有键和 contains() 的东西?

最佳答案

I. 使用 key 和 current() 的另一种解决方案:) :

<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="kItemByProp" match="item"
use="boolean(/*/properties/property/@id
[contains(concat(' ', current()/@properties, ' '),
.)]
)"/>

<xsl:template match=
"item[count(.| key('kItemByProp', 'true'))
=
count(key('kItemByProp', 'true'))
]
">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>

当此转换应用于提供的 XML 文档时:
<t>
<items>
<item id='a' properties='red little' />
<item id='b' properties='big strong heavy' />
<item id='c' properties='blue heavy' />
</items>
<properties>
<property id='red' />
<property id='little' />
<property id='blue' />
</properties>
</t>

产生了想要的正确结果:
<item id="a" properties="red little"/>
<item id="c" properties="blue heavy"/>

二、没有键,但有条件指令作为模板主体的最外层:
 <xsl:template match="item">
<xsl:if test=
"/*/properties/*/@id
[contains(concat(' ', current()/@properties, ' '), .)]">
<!-- Your processing here -->
</xsl:if>
</xsl:template>

这是一个完整的转换:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="item">
<xsl:if test=
"/*/properties/*/@id
[contains(concat(' ', current()/@properties, ' '), .)]">
<xsl:copy-of select="."/>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

当此转换应用于同一个 XML 文档(上图)时,会产生相同的正确结果 :
<item id="a" properties="red little"/>
<item id="c" properties="blue heavy"/>

关于xslt - 匹配 XSLT 中的空格分隔值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14033801/

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