如何在 <xsl:if test="contains(string, searchedforstring)"> 中使用变量而不是字符串

Posted

技术标签:

【中文标题】如何在 <xsl:if test="contains(string, searchedforstring)"> 中使用变量而不是字符串【英文标题】:how to use a variable instead of a string in <xsl:if test="contains(string, searchedforstring)"> 【发布时间】:2010-12-29 19:13:44 【问题描述】:

xsl contains 函数使用字符串值...但是如何动态分配 searchedforstring 的值?应该可以将 html 表单中的文本输入字段的值分配给变量,并将其用作 xsl 文档中搜索字符串的值。

以下脚本 sn-p 获取输入文本的值并将其分配给全局变量 strName*。问题是使用 strName 的值代替搜索的字符串。

<script language="text/javascript">
var strName;
function nameDetails()
var strName = getElementById("txtField1").value;
</script>

【问题讨论】:

你能详细说明一下吗?另外,编辑代码的第一行以在末尾添加 */。 嗨,James,我创建了一个示例以使事情更清晰。我已将详细信息作为文字文档包含在内...这似乎是您可以从eyle.org/XSLcontainsExample.doc 检索到的最简单的内容,并且包含一个全面的视图。或者,我将 XML 文件发布到 eyle.org/books1.xml,XSL 文件位于 eyle.org/contains1books.xsl ...希望您能提供帮助 【参考方案1】:

您的问题并不完全清楚,但我认为这可能就足够了。

您可以将值分配给 XML 文档中的某个节点,然后从您的 XSL 中获取该值(也许将其分配到 XSL 变量或其他东西中)。然后,您可以在 XSL 中使用 XSL 变量。

除非我有误解,在这种情况下,你能详细说明一下吗。

【讨论】:

您好,我创建了一个示例以使事情更清晰。我已将详细信息作为 word doc 包含在内……这似乎是您可以从 eyle.org/XSLcontainsExample.doc 检索到的最简单的内容,并且包含一个全面的视图。或者,我将 XML 文件发布到 eyle.org/books1.xml,XSL 文件位于 eyle.org/contains1books.xsl ...希望您能提供帮助 - eyle.org/XSLcontainsExample.doceyle.org/books1.xmleyle.org/contains1books.xsl【参考方案2】:

您问题的内容似乎与 XSL 没有任何关系。我的猜测是您正在寻找一种将参数传递给 XSL 处理的方法。我在question 中的回答可能会提供一些线索。如果你能更详细地澄清你的问题,那么也许可以制定一个更具体的例子。

【讨论】:

【参考方案3】:

正如 anthony 指出的那样,我认为您希望在样式表中使用一个参数,以便您可以传入要匹配的值。

使用您的样式表,我添加了参数“作者”,您可以传入任何值。

<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="author"/>
  <xsl:output method="html"
     omit-xml-declaration="yes"/>

  <xsl:template match="/">
    <html>
       <head>
       <title>books example</title>
       </head>

    <body>
       <xsl:apply-templates select="//book"/>
    </body>
    </html>
  </xsl:template>


  <xsl:template match="book">
       <xsl:if test="contains(author, $author)">

       <DIV>
         <I><xsl:value-of select="title"/></I> by
         <J><xsl:value-of select="author"/></J> genre
         <B><xsl:value-of select="book_genre"/></B>

       </DIV>
     </xsl:if>
  </xsl:template>
  </xsl:stylesheet>

不确定您是如何调用样式表的,但传递参数类似于:

xslProc.addParameter("author", strName);

【讨论】:

以上是关于如何在 <xsl:if test="contains(string, searchedforstring)"> 中使用变量而不是字符串的主要内容,如果未能解决你的问题,请参考以下文章

XSL:IF 内 XSL:for-each-group

如何创建布尔值?

如何定位命名空间 xsi:type="test1"

将 XSLT 中的新类添加到现有的 div 标签类?

js,如何防止特殊字符被转义

如何写ant的打包命令