在一组节点上进行 XSL 测试?

发布于 2024-11-08 16:51:38 字数 483 浏览 0 评论 0原文

我有一组带有类型属性的“文件”节点,

<files>
    <file type="main">asdf</file>
    <file type="main_en">asdf</file>
    <file type="main_fr">asdf</file>
    <file type="pdf">asdf</file>
</files>

如果其中一个节点至少有 1 个以“main”开头的属性,如何检查这组文件。 我在想:

<xsl:when test="contains(string(files/file[@type]),'main')">

但是我知道的所有功能或测试似乎仅适用于特定节点,而不是一组节点。 我宁愿避免使用 for every type 解决方案。

I have a set of "file" nodes with a type attribute

<files>
    <file type="main">asdf</file>
    <file type="main_en">asdf</file>
    <file type="main_fr">asdf</file>
    <file type="pdf">asdf</file>
</files>

How do I check on the set of files if one of the nodes has at least 1 attribute that starts with "main".
I was thinking something like:

<xsl:when test="contains(string(files/file[@type]),'main')">

But all the functions or tests I know seem to only be for a specific node and not a set of nodes.
I would rather avoid using a for each type solution.

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

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

发布评论

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

评论(3

遮了一弯 2024-11-15 16:51:38

如果出现以下情况,我该如何检查文件集
其中一个节点至少有 1
以“main”开头的属性。

使用

boolean(/*/file[@*[starts-with(., 'main')]])

当至少有一个 file 元素是 XML 文档顶部元素的子元素时,其计算结果为 true()并且至少有一个属性,其字符串值以字符串 "main" 开头

当在 test 属性中使用时() 或作为谓词,对 boolean() 函数的引用不是必需的,可以省略

/*/file[@*[starts-with(., 'main')]]

How do I check on the set of files if
one of the nodes has at least 1
attribute that starts with "main".

Use:

boolean(/*/file[@*[starts-with(., 'main')]])

This evaluates to true() exactly when there is at least one file element that is a child of the top element of the XML document and that has at least one attribute, whose string value starts with the string "main"

When used in a test attribute (of <xsl:if> or <xsl:when>) or as a predicate, the reference to the boolean() function is not necessary and may be omitted:

/*/file[@*[starts-with(., 'main')]]
半山落雨半山空 2024-11-15 16:51:38
<xsl:when test="files/file[contains(@type, 'main')]">

或者,甚至更好:

<xsl:when test="files/file[starts-with(@type, 'main')]">
<xsl:when test="files/file[contains(@type, 'main')]">

Or, even better:

<xsl:when test="files/file[starts-with(@type, 'main')]">
请止步禁区 2024-11-15 16:51:38

不知道你的真正目的,但这个例子可能对你有帮助:

 <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="/files">
        <xsl:if test="file[contains(@type,'main')]">
            There is at least one file element with 'main' in @type
        </xsl:if>
  </xsl:template>


</xsl:stylesheet>

Don't know your real purpose, but this example might help you:

 <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="/files">
        <xsl:if test="file[contains(@type,'main')]">
            There is at least one file element with 'main' in @type
        </xsl:if>
  </xsl:template>


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