在 XPath 中组合谓词

发布于 2024-12-07 00:33:57 字数 1045 浏览 0 评论 0原文

我有一些像这样的 XML:

<MT N="tag1" V="text"/>
<MT N="tag2" V="more text"/>
<MT N="tag3" V="other text"/>
<MT N="tag4" V="something cool"/>
<MT N="target_tag" V="i want this"/>
<MT N="target_tag" V="and this"/>

我试图以 N=target_tag 和数字(1 或 2)定位 MT

尽管我希望从 此链接获得以下内容,但以下内容不起作用:

<xsl:variable name="display" select="MT[@N = 'target_tag' and 2]/@V" />

如果我尝试这个,我始终得到第一个:

<xsl:variable name="display" select="MT[@N = 'target_tag']/@V" />

如果我尝试这个,我始终得到第二个 MT 标签(因此在本例中为“更多文本”):

<xsl:variable name="display" select="MT[2]/@V" />

我也尝试过这个但没有运气:

<xsl:variable name="display" select="MT[2][@N = 'target_tag']/@V" />

根据我的要求,我需要将它们结合起来,这样当我正在循环一个递归函数,我可以显示第一个,然后是第二个,然后是第三个。

有什么想法可以将它们结合起来吗?

I have some XML like this:

<MT N="tag1" V="text"/>
<MT N="tag2" V="more text"/>
<MT N="tag3" V="other text"/>
<MT N="tag4" V="something cool"/>
<MT N="target_tag" V="i want this"/>
<MT N="target_tag" V="and this"/>

I'm trying to target the MT where N=target_tag and by number (1 or 2).

The following doesn't work, despite what I was hoping from this link:

<xsl:variable name="display" select="MT[@N = 'target_tag' and 2]/@V" />

If I try this, I consistently get the first one:

<xsl:variable name="display" select="MT[@N = 'target_tag']/@V" />

And if I try this, I consistently get the second MT tag (so "more text" in this example):

<xsl:variable name="display" select="MT[2]/@V" />

I've tried this with no luck too:

<xsl:variable name="display" select="MT[2][@N = 'target_tag']/@V" />

Based on my requirements, I need to combine them, so that when I'm looping through a recursive function I can show the first, then the second, then the third.

Any ideas how these can be combined?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

瑾兮 2024-12-14 00:33:57

select="MT[@N = 'target_tag'][2]" 应该可以。

select="MT[@N = 'target_tag'][2]" should work.

来日方长 2024-12-14 00:33:57

输入 XML:

<root>
<MT N="tag1" V="text"/>
<MT N="tag2" V="more text"/>
<MT N="tag3" V="other text"/>
<MT N="tag4" V="something cool"/>
<MT N="target_tag" V="i want this"/>
<MT N="target_tag" V="and this"/>
</root>

XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="root">
        <xsl:for-each select="MT">
            <xsl:if test="@N = 'target_tag'">
                <xsl:value-of select="@V"/>
            </xsl:if>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

输出:

我想要这个和这个

Input XML:

<root>
<MT N="tag1" V="text"/>
<MT N="tag2" V="more text"/>
<MT N="tag3" V="other text"/>
<MT N="tag4" V="something cool"/>
<MT N="target_tag" V="i want this"/>
<MT N="target_tag" V="and this"/>
</root>

XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="root">
        <xsl:for-each select="MT">
            <xsl:if test="@N = 'target_tag'">
                <xsl:value-of select="@V"/>
            </xsl:if>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

Output:

i want thisand this

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文