gpt4 book ai didi

xslt - 如何从匹配属性值的节点集中获取节点?

转载 作者:行者123 更新时间:2023-12-03 16:55:45 28 4
gpt4 key购买 nike

我有一个节点集存储在如下所示的变量中

<xsl:variable name="myXML">
<list>
<input name="First" elementName="FirstName" option="one" />
<input name="Second" elementName="SecondName" option="Two" />
<input name="Third" elementName="ThirdName" option="Three" />
<input name="Fourth" elementName="FourthName" option="Four" />
</list>
</xsl:variable>


我下面的代码正确检索节点及其属性。
但是,即使找到匹配项,以下代码中的for-each也会重复进行,直到到达最后一个 <input>节点。
因此,如果我的节点集中有很多 <input>节点的清单很大,则可能会导致性能问题。
我需要将以下代码重构得更简单,可能没有for-each。

<xsl:template match="/">
<xsl:variable name="checkName" select="'Third'" />
<xsl:variable name="getNode">
<xsl:for-each select="$myXML/list/input">
<xsl:if test="./@name=$checkName">
<xsl:copy-of select="." />
</xsl:if>
</xsl:for-each>
</xsl:variable>
<xsl:variable name="element" select="$getNode/input/@elementName" />
<xsl:variable name="option" select="$getNode/input/@option" />
<element><xsl:value-of select="$element" /></element>
<option><xsl:value-of select="$option" /></option>
</xsl:template>


我想要的是,我有一个输入变量checkName =“ Third”,并且我需要两个与 <input>节点的name属性中的值匹配的变量中的'elementName'和'option'属性值。请为我提供解决方案,并且我也不想使用exslt或任何其他扩展名。

最佳答案

使用predicate过滤器将@namecheckName变量进行比较。

通过删除for-each和其他变量以使用简单的XPATH语句,可以大大简化样式表:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:variable name="myXML">
<list>
<input name="First" elementName="FirstName" option="one" />
<input name="Second" elementName="SecondName" option="Two" />
<input name="Third" elementName="ThirdName" option="Three" />
<input name="Fourth" elementName="FourthName" option="Four" />
</list>
</xsl:variable>

<xsl:template match="/">
<xsl:variable name="checkName" select="'Third'" />
<element><xsl:value-of select="$myXML/list/input[@name=$checkName]/@elementName" /></element>
<option><xsl:value-of select="$myXML/list/input[@name=$checkName]/@option" /></option>
</xsl:template>
</xsl:stylesheet>

关于xslt - 如何从匹配属性值的节点集中获取节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4555841/

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