gpt4 book ai didi

xslt 模式匹配转换

转载 作者:行者123 更新时间:2023-12-02 00:38:16 24 4
gpt4 key购买 nike

如何使用 XSLT 转换以下 XML:

<root>
<list>
<item label="21(1)">some text</item>
<item label="(2)">some text</item>
</list>
<list>
<item label="a">some text</item>
<item label="b">some text</item>
</list>
</root>

为此:

<root>
<list label="21">
<item label="(1)">some text</item>
<item label="(2)">some text</item>
</list>
<list>
<item label="a">some text</item>
<item label="b">some text</item>
</list>
</root>

因此,如果第一个 itemlabel 属性的括号前有一个数字,则需要将该数字添加为 的值父 list 项的 label 属性。

匹配属性的模式是这样的:

/(\d+)\([^\)]+\)/

最佳答案

如 Nikolaus 所述,您可以使用 substring-beforesubstring-after XPath 函数。示例 XSL 转换如下所示:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>

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

<xsl:template match="list">
<list>
<xsl:variable name="prefix" select="substring-before(./item/@label, '(')" />
<xsl:if test="$prefix != '' and number($prefix)">
<xsl:attribute name="label">
<xsl:value-of select="substring-before(./item/@label, '(')"/>
</xsl:attribute>
</xsl:if>
<xsl:apply-templates />
</list>
</xsl:template>

<xsl:template match="item">
<item>
<xsl:attribute name="label">
<xsl:variable name="prefix" select="substring-before(@label, '(')" />
<xsl:choose>
<xsl:when test="$prefix != '' and number($prefix)">
<xsl:value-of select="concat('(', substring-after(@label, '('))"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="@label"/>
</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
<xsl:apply-templates />
</item>
</xsl:template>
</xsl:stylesheet>

关于xslt 模式匹配转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3685798/

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