2012-10-24 84 views
0

打我的墙在这里...XSLT 2.0。循环里面一个函数

我有以下数据,主要员工可能有多个家属。我需要创建一个函数来匹配员工的SSN(ab:SSN)和Dependent_SSN,并确定他们中的一个是否为'配偶'。如果是这样,那么我们将返回'配偶'的Dependent_SSN。 如果不是,我们将继续并返回下一个非'Spouse'Dependent_SSN。

我想创建一个函数,因为我认为我会多次需要这个函数。代码片段位于正在执行其他循环功能的现有模板中。

我已经试过,但氧气返回一个错误:

<xsl:function name="ab:PQB"> 
    <xsl:param name="EE_SSN"> 
    </xsl:param> 

    <xsl:for-each select="/ab:Report_Data/ab:Report_Entry[ab:Employee_ID=$EE_SSN]/ab:Report_Data/ab:Report_Entry[ab:Employee_ID=$EE_SSN]ab:dependents/ab:Dependent_SSN"> 

    </xsl:for-each> 

返回的错误是:

“引擎名称:撒克逊PE 9.3.0.5 严重性:致命 描述:意外令牌名称“wd:依赖人”超越表达式结尾“

我知道我需要测试更高级别的SSN,以防止通过家属循环,但就像我说的”我对我的墙“:)

数据是在这里:

<ab:Report_Entry> 
<ab:SSN>888881006</ab:SSN> 
<ab:Last_Name>Smith</ab:Last_Name> 
<ab:First_Name>Kimberly</ab:First_Name> 
<ab:dependents> 
<ab:Dependent_SSN>888881009</ab:Dependent_SSN> 
<ab:Relation ab:Descriptor="Spouse"> 
</ab:Relation> 
</ab:dependents> 
<ab:dependents> 
<ab:Dependent_SSN>888881004</ab:Dependent_SSN> 
<ab:Relation ab:Descriptor="Child"> 
</ab:Relation> 
</ab:dependents> 
<ab:dependents> 
<ab:Dependent_SSN>888881003</ab:Dependent_SSN> 
<ab:Relation ab:Descriptor="Child"> 
<ab:ID ab:type="Related_Person_Relationship_ID">Child</ab:ID> 
</ab:Relation> 
</ab:dependents> 
<ab:dependents> 
<ab:Dependent_SSN>888881001</ab:Dependent_SSN> 
<ab:Dependent_ID>1032D-4</ab:Dependent_ID> 
<ab:Relation ab:Descriptor="Child"> 
<ab:ID ab:type="Related_Person_Relationship_ID">Child</ab:ID> 
</ab:Relation> 
</ab:dependents> 
</ab:Report_Entry> 

谢谢任何​​意见!

回答

0

您可能想要定义输入参数的类型和函数结果的类型,然后编写返回该类型值的函数体。目前,您的描述听起来相当程序化,这不适用于XSLT/XPath。

至于错误,我认为在路径/ab:Report_Data/ab:Report_Entry[ab:Employee_ID=$EE_SSN]/ab:Report_Data/ab:Report_Entry[ab:Employee_ID=$EE_SSN]ab:dependents/ab:Dependent_SSN你需要一个更多的斜杠/ab:Report_Data/ab:Report_Entry[ab:Employee_ID=$EE_SSN]/ab:Report_Data/ab:Report_Entry[ab:Employee_ID=$EE_SSN]/ab:dependents/ab:Dependent_SSN有一个语法上正确的路径。这应该避免你得到的语法错误,但不可能返回你想要的结果。

+0

Martin,谢谢。我确定如何处理输入函数的输入,但我可以研究那个输入函数。 我想你的建议,但收到以下错误: **引擎名称:撒克逊PE 9.3.0.5 严重性:致命 说明:“/”开头不能选择包含上下文项树的根节点:在上下文项未定义** –

+0

路径本身不再是错误,但是当您尝试在函数内部使用它时,它会导致您现在看到的错误。您必须将节点作为参数传递给您的函数,并写入相对于该节点的路径,例如'。再次,这是一个概念性修复,而不是尝试修复该功能。 –