0

在这里撞到我的墙...

我有以下数据,其中主要员工可能有多个家属。我需要创建一个函数,将员工的 SSN (ab:SSN) 与 Dependent_SSN 进行匹配,并确定其中一个是否是“配偶”。如果是这样,那么我们将返回“配偶”的 Dependent_SSN。如果没有,我们将继续并返回下一个非“配偶”Dependent_SSN。

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

我已经尝试过了,但 Oxygen 返回错误:

<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>

返回的错误是:

“引擎名称:Saxon-PE 9.3.0.5 严重性:致命描述:意外的令牌名称“wd:dependents”超出了表达式的结尾”

我知道我需要测试更高级别的 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>

感谢您的任何建议!

4

1 回答 1

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才能获得语法正确的路径。那应该避免您得到的语法错误,但不太可能返回您想要的结果。

于 2012-10-24T13:22:19.583 回答