Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.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
Xslt 父节点文本值上的模板匹配_Xslt - Fatal编程技术网

Xslt 父节点文本值上的模板匹配

Xslt 父节点文本值上的模板匹配,xslt,Xslt,下面是一些XML <flowTypologies type="flowTypologies"> <flowTypology type="flowTypology"> <label type="string">Typology0</label> <value type="string">CAP</value> </flowTypology> <flowTypology type="

下面是一些XML

<flowTypologies type="flowTypologies">
  <flowTypology type="flowTypology">
    <label type="string">Typology0</label>
    <value type="string">CAP</value>
  </flowTypology>
  <flowTypology type="flowTypology">
    <label type="string">Typology1</label>
    <value type="string"/>
  </flowTypology>
  <flowTypology type="flowTypology">
    <label type="string">Typology2</label>
    <value type="string"/>
  </flowTypology>
  <flowTypology type="flowTypology">
    <label type="string">Typology3</label>
    <value type="string"/>
  </flowTypology>
  <flowTypology type="flowTypology">
    <label type="string">Typology4</label>
    <value type="string">INT</value>
  </flowTypology>
  <flowTypology type="flowTypology">
    <label type="string">GlobalCashflowTypology</label>
    <value type="string"/>
  </flowTypology>
</flowTypologies>

类型学0
帽子
类型学1
类型学2
类型学3
类型学4
国际的
全球流动类型学
下面是一个样式表片段来转换它

<xsl:stylesheet
        xmlns:xs="http://www.w3.org/2001/XMLSchema" 
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
exclude-result-prefixes="xs" version="1.0">
   <xsl:strip-space elements="*"/>
   <xsl:template  match="flowTypologies[. = 'Typology0CAPTypology1Typology2Typology3Typology4INTGlobalCashFlowTypology']">
      <xsl:text>I should get here</xsl:text>
   </xsl:template>

</xsl:stylesheet>

我应该到这里
因此,希望模板匹配顶级节点的文本值。模板谓词中的字符串应该是FlowType下所有从属节点中文本的串联

然而,它并不匹配

这是一个XSLT1.0样式表,我尝试用Saxon 6.5和Xalan对其进行转换


我已经对FlowTypeology做了一个值,它确实产生了谓词中测试的值,但规则从不触发。

只需将模板匹配减少为:

<xsl:template  match="flowTypologies">
  <xsl:text>I should get here</xsl:text>
</xsl:template>

我应该到这里
我想不出在这里用钥匙的理由。如果为最外面的元素定义了键,那么它们实际上位于错误的位置,因为只有一个键。此外,决不能依赖字符串的串联来限定模板匹配。例如,这是有风险的,因为并非所有实现都以相同的方式处理空白

然而,它并不匹配

它不匹配,因为XML区分大小写:
“GlobalCashFlowType”
“GlobalCashFlowType”
不同


除此之外,我不确定您在这里想要实现什么,但肯定有比使用巨大的字符串来匹配包装器更好的方法?

您是完全正确的。我错过了上次答复中指出的错字。它最初是由Dmitre Novatchev在XSL邮件列表上发现的,但即使在他指出之后,我也没有看到它。想象一下,对于每一个独特的价值叶节点组合,您都希望触发一个不同的模板。庞大的字符串比您必须编写的多条件字符串更可取。我将使用一个键,并首先对值进行排序。因为你们现在所拥有的是一个特定的排列,而不是组合。我所说的唯一组合是指排列。我发帖时没有用数学术语思考。