gpt4 book ai didi

.net - 为什么没有选择更好匹配的模板?

转载 作者:行者123 更新时间:2023-12-02 01:41:32 25 4
gpt4 key购买 nike

我有以下 xml:

<root xmlns:s="http://example.com/schema">
<foo>
<s:bars>
<s:bar name="normal">bar101</s:bar>
<s:bar name="special">Foobar</s:bar>
<s:bar name="super">FuBar</s:bar>
</s:bars>
</foo>
</root>

我使用以下 xslt 模板输出 bar元素:

  <xsl:template match="root">
<foos>
<xsl:apply-templates select="foo/s:bars"/>
</foos>
</xsl:template>

<xsl:template match="s:bars/s:bar[@name='special' or @name='super']">
<xsl:element name="{@name}">
<xsl:text>special value:</xsl:text>
<xsl:value-of select="."/>
</xsl:element>
</xsl:template>

<xsl:template match="s:bars/s:bar">
<xsl:element name="{@name}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:template>

奇怪的是,当使用 .Net XSLT 处理器时,它会输出以下 xml:

<foos>
<normal>bar101</normal>
<special>Foobar</special>
<super>FuBar</super>
</foos>

显然是 s:bars/s:bar[@name='special' or @name='super'] 的模板未使用。我期望得到以下输出:

<foos>
<normal>bar101</normal>
<special>special value:Foobar</special>
<super>special value:FuBar</super>
</foos>

我尝试添加一个额外的模板来选择 bars

  <xsl:template match="s:bars">
<xsl:comment>bars</xsl:comment>
<xsl:apply-templates />
</xsl:template>

但这并没有改变结果(但确实将 <!--bars--> 添加到结果中以便调用模板。)

我似乎期待与 template rules 不同的东西或误解他们。不应该选择元素 AND 属性的匹配而不是 ONLY 元素的匹配吗?

我应该如何更改我的 XSLT 模板以使用 .Net XSLT 处理器实现获得我想要的输出?

最佳答案

两个模板具有相同的优先级 0.5 (参见 http://www.w3.org/TR/xslt#conflict )因此 XSLT 处理器可以报告错误或接受最后一个错误。如果您没有收到错误,那么您的 XSLT 处理器已经采用了最后一个匹配的模板规则。因此,要么更改顺序,要么为您希望成为首选的那个设置明确的优先级(例如 <xsl:template match="s:bars/s:bar[@name='special' or @name='super']" priority="5">)。

关于.net - 为什么没有选择更好匹配的模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28250892/

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