Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 如何改进XSL中的变量重写?_Xml_Xslt - Fatal编程技术网

Xml 如何改进XSL中的变量重写?

Xml 如何改进XSL中的变量重写?,xml,xslt,Xml,Xslt,我想做以下工作: 声明一个变量 进入if语句 覆盖变量 XSL说我不能两次声明一个变量,那么我能做些什么来改进这一步呢 另一种方法是检查是否设置了变量。之所以这样做,是因为我跳过了第一步,并在if语句中声明了变量。在另一个if语句中,我想检查变量是否存在。正如您所发现的,xslt标准要求: 如果出现以下情况,则一个绑定会隐藏另一个绑定 绑定发生在以下位置: 另一个绑定可见,并且 绑定具有相同的名称。这是一个 如果绑定是由 xsl:variable或xsl:param元素 在一个模板内,另一个 由

我想做以下工作:

  • 声明一个变量
  • 进入if语句
  • 覆盖变量
  • XSL说我不能两次声明一个变量,那么我能做些什么来改进这一步呢


    另一种方法是检查是否设置了变量。之所以这样做,是因为我跳过了第一步,并在if语句中声明了变量。在另一个if语句中,我想检查变量是否存在。

    正如您所发现的,xslt标准要求:

    如果出现以下情况,则一个绑定会隐藏另一个绑定 绑定发生在以下位置: 另一个绑定可见,并且 绑定具有相同的名称。这是一个 如果绑定是由 xsl:variable或xsl:param元素 在一个模板内,另一个 由xsl:变量建立的绑定 或xsl:param元素也在 模板。如果 由xsl:变量建立的绑定 或模板中的xsl:param元素 阴影由建立的另一个绑定 顶级xsl:variable或xsl:param 元素

    这里的解决方案取决于您真正想要做什么

    • 如果希望变量对整个模板采用单个值,但希望该值取决于某个条件,请在元素内部放置一个或(更可能)一个变量
    • 如果希望变量仅在块内具有不同的值,则
      • 使用不同的变量名或
      • 在中放置一个,并在调用的模板中再次定义变量

      • 这里有几个问题与您对XSLT变量有相同的误解


        建议阅读这些问题的答案。;)

        如果您提到了您认为需要“过度编写变量”的示例代码,那么像Tomalak、Dimitre这样的任何专家都会向您建议一个更好的(替代)选项/建议

        嗯。如果这只是你的问题(比如如何处理变量不能变化的语言!!!??),那么我打赌你会在继续练习的过程中得到澄清

        当我作为一个初学者开始使用XSLT时,甚至我也遇到了同样的问题。。但很快我意识到我们不需要变量变化;)

        我觉得使用XSLT是我的荣幸。
        您可以用处理函数和过程的方式来处理模板。(不准确)
        您可以递归地调用它们。
        您可以想象的数据操作程度可以通过一种或另一种方式实现。。(可能不容易,但至少也不是不可能)。。


        回到您的问题,如果您确实需要更改变量的值。。然后,请随意定义一个新变量!?对上一个变量的值使用数学运算符、内置函数等,而不是重新分配给同一个变量。。把它分配给一个新的。。你想怎么用就怎么用


        这可能不是有效的技术,但可能是第一步


        另一方面你可以发送表达式。。[
        类似于将(,abc,abc)
        ]作为参数(Param)转换为其他模板。。或者可以直接作为输出写入!!以避免变量发生变化。:)

        这不是对你想做什么的描述,而是对你想怎么做的描述。(这怎么可能不起作用。)描述一下你想做什么。这并不总是一个“什么”的问题。我的问题包含许多编程语言中的一个通用过程(设置变量和重置变量)。所以我只是问你是怎么做到的。希望您能够接受某些人的这种想法,他们是XSL-usage的新手。这始终是一个“您想做什么”的问题。即使在常规编程语言中,设置/重置变量也只是达到目的的一种手段。因为在XSLT中重新分配变量是不可能的,所以了解您实际要做的事情是至关重要的。否则,您可能得到的任何提示都将是模糊的。这是XSLT!XSLT是一种函数式语言。在函数式语言中,一旦初始化变量,就不能更新变量的值。这就是定义。作为一名函数式程序员开始思考,如果不能,甚至不要尝试XSLT。如果没有更新变量的能力,谁真的做不到,谁就不会理解语言的基本原理。对这些人最好的建议是多了解函数式编程,或者远离函数式编程languages@Dimitre:别紧张。大多数人生来就没有真正理解函数式语言和过程式语言之间的差异。而对于一个人来说,在他“甚至是”一门函数式语言之前,“开始像一个函数式程序员一样思考”是最困难的。是的,这是一个常见的错误。这就是为什么我宁愿向他展示如何改变他的思维方式,也不愿斥责他一开始思维不正确。梅内斯:对不起,我把我的评论转移到了这个问题上——它属于哪里:(至于你的回答,我佩服你的耐心,仍然怀疑这对OP是否有用——显然,他需要数月的练习。这是一个模糊问题的好答案