gpt4 book ai didi

xslt - 使用 XSLT 2.0 将多个属性的值解析为类似数组的结构

转载 作者:行者123 更新时间:2023-12-01 00:53:31 26 4
gpt4 key购买 nike

我希望能够选择文档中某种类型的所有属性(例如,//@arch),然后获取该节点集并将值解析为第二个节点集。当我说“解析”时,具体来说我的意思是我想像这样转换一个节点集:

arch="value1;value2;value3"
arch="value1:value4"

进入这样的节点集:
arch="value1"
arch="value2"
arch="value3"
arch="value1"
arch="value4"

或类似的东西;我想将各个值从属性中取出并放入它们自己的节点中。

如果我可以让它达到那个状态,我有很多排序和重复删除的方法,之后我将使用完成的节点集进行发布任务。

我并不是在这里寻找一个整洁的答案作为一种方法。我知道 XSLT 不能做动态数组,但这与不能做诸如动态数组之类的事情或模仿功能的重要部分的事情不同。

我想到的一个想法是,我可以计算第一个节点集中的节点和分隔符的数量,计算第二个节点集需要的条目数并创建它(以某种方式),并使用子字符串函数将第一个节点集解析为第二个节点集。

通常有一种方法可以解决 XSLT 的问题;有没有人解决过这个问题?

谢谢你的帮助,
杰夫。

最佳答案

您可以使用 tokenize for 中的函数表达式以获取一系列单独的值,然后为每个值创建一个属性节点。但是,由于 XSLT 不允许您创建没有元素父元素的裸属性节点,因此您必须使用如下技巧:

<xsl:variable name="archElements">
<xsl:for-each select="for $attr in $initialNodeSet
return tokenize($attr, '[:;]')">
<dummy arch="{.}" />
</xsl:for-each>
</xsl:variable>

然后 $archElements/dummy/@arch应该是分离的集合 arch您需要的属性节点。

完整示例:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">

<xsl:output indent="yes" />

<xsl:template match="/">
<xsl:variable name="inputData">
<a arch="value1;value2;value3" />
<a arch="value1:value4" />
</xsl:variable>

<!-- create an example node set containing the two arch attribute nodes -->
<xsl:variable name="initialNodeSet" select="$inputData/a/@arch" />

<!-- tokenize and generate one arch attribute node for each value -->
<xsl:variable name="archElements">
<xsl:for-each select="for $attr in $initialNodeSet
return tokenize($attr, '[:;]')">
<dummy arch="{.}" />
</xsl:for-each>
</xsl:variable>

<!-- output to verify -->
<r>
<xsl:for-each select="$archElements/dummy/@arch">
<c><xsl:copy-of select="."/></c>
</xsl:for-each>
</r>
</xsl:template>
</xsl:stylesheet>

当运行任何输入文档(内容被忽略)时,这会产生
<?xml version="1.0" encoding="UTF-8"?>
<r>
<c arch="value1"/>
<c arch="value2"/>
<c arch="value3"/>
<c arch="value1"/>
<c arch="value4"/>
</r>

关于xslt - 使用 XSLT 2.0 将多个属性的值解析为类似数组的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18339114/

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