xslt 2.0:无法从xml中选择多个值

时间:2019-05-02 02:29:51

标签: xml xslt

我有一个传入的大型XML 2段

第一段。原始数据作为细分 第二段。应该传递的数据在第二个。

我正在第二个循环上运行,并检查第二个分段中FIeld1的值是否在第一个分段上存在。

问题:第一段相对于第二段中的Field1有多个收益,但是存储为1个字段,而我无法将它们作为字段分开。

下面是在第二段中的Field1上对整个第一段运行时的代码,它产生2个结果并将它们存储为一个字段值。我希望它们显示为单独的XML字段。

注意:当有1次点击时,此方法可以正常工作。

<xsl:variable name="CheckEmployeeExists">
<xsl:value-of select="../../PerEmail/PerEmail/emailAddress[personIdExternal=$EmpNumber]" />
</xsl:variable>

如何通过多个整数生成值的示例

<Personidexternal xmlns:xs="http://www.w3.org/2001/XMLSchema">801035 801035</Personidexternal>

我想要的就是这样

<Personidexternal>801035</Personidexternal>
<Personidexternal>801035</Personidexternal>

下面是在第二段中的Field1上对整个第一段运行时的代码,它产生2个结果并将它们存储为一个字段值。我希望它们显示为单独的XML字段。

注意:当有1次点击时,此方法可以正常工作。

<xsl:variable name="CheckEmployeeExists">
<xsl:value-of select="../../PerEmail/PerEmail/emailAddress[personIdExternal=$EmpNumber]" />
</xsl:variable>

如何通过多个整数生成值的示例

<Personidexternal xmlns:xs="http://www.w3.org/2001/XMLSchema">801035 801035</Personidexternal>

我想要的就是这样

<Personidexternal>801035</Personidexternal>
<Personidexternal>801035</Personidexternal>

1 个答案:

答案 0 :(得分:0)

此构造有点代码味道:

<xsl:variable name="CheckEmployeeExists">
<xsl:value-of select="../../PerEmail/PerEmail/emailAddress
     [personIdExternal=$EmpNumber]" />
</xsl:variable>

它使用单个文本节点构造一个文档节点,该文本节点的值是“选择”表达式(正是您所看到的)所选择的节点的字符串值的串联。

通常,当人们写这篇文章时,写起来要好得多

<xsl:variable name="CheckEmployeeExists"
select="../../PerEmail/PerEmail/emailAddress
     [personIdExternal=$EmpNumber]" />

我无法确定您的情况是否如此,因为我们看不到使用该变量的代码,并且变量名的选择非常无益。

在不看更多代码的情况下无法告诉您如何更正代码;但这是一个猜测:

<xsl:copy-of
  select="../../PerEmail/PerEmail/emailAddress/personIdExternal[.=$EmpNumber]">

请记住:

(a)声明变量的类型在XSLT 2.0中始终是一个好主意:它确定作者,读者和编译器都在同一个赞美诗页上。

(b)使用xsl:value-of通常是一个错误,特别是当它是xsl:variablexsl:function内的唯一指令时