我有一个XML:
<?xml version="1.0" encoding="UTF-8"?>
<pi:PEE xmlns:pi="urn:com.workday/picof">
<pi:Employee>
<pi:Name>NAME ONE</pi:Name>
<pi:Additional_Information>
<pi:Strike_1>2017-sept.-14,8 Hours=9570</pi:Strike_1>
<pi:Strike_2>2017-sept.-11,8 Hours=9570</pi:Strike_2>
</pi:Additional_Information>
</pi:Employee>
<pi:Employee>
<pi:Name>NAME TWO</pi:Name>
<pi:Additional_Information>
<pi:Strike_1>2017-sept.-10,8 Hours=9570</pi:Strike_1>
</pi:Additional_Information>
</pi:Employee>
</pi:PEE>
和XSLT:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
xmlns:pi="urn:com.workday/picof"
version="2.0">
<xsl:output indent="yes" method="xml" omit-xml-declaration="yes"/>
<xsl:strip-space elements="*"/>
<xsl:variable name="S1" select="/pi:PEE/pi:Employee/pi:Additional_Information/pi:Strike_1"/>
<xsl:variable name="S2" select="/pi:PEE/pi:Employee/pi:Additional_Information/pi:Strike_2"/>
<xsl:template name="Header">
<xsl:copy-of select="."/>
</xsl:template>
<!-- Copy Data -->
<xsl:template match="@* | node()" mode="#all">
<xsl:copy>
<xsl:apply-templates select="@* | node()" mode="#current"/>
</xsl:copy>
</xsl:template>
<!-- Manipulation of Additional Information -->
<xsl:template match="pi:PEE/pi:Employee/pi:Additional_Information">
<xsl:for-each select="pi:Strike_1">
<pi:Time_Off>
<pi:Code_Name>Unpaid Time Off</pi:Code_Name>
<pi:Time_Off_Type><xsl:value-of select="substring-after($S1,'=')"/></pi:Time_Off_Type>
<pi:Time_Off_Date><xsl:value-of select="substring-before($S1,',')"/></pi:Time_Off_Date>
<pi:Quantity><xsl:value-of select="substring-before(substring-after($S1,','),' ')"/></pi:Quantity>
<pi:Unit_of_Time><xsl:value-of select="substring-after(substring-before($S1,'='),' ')"/></pi:Unit_of_Time>
</pi:Time_Off>
</xsl:for-each>
<xsl:for-each select="pi:Strike_2">
<pi:Time_Off>
<pi:Code_Name>Unpaid Time Off</pi:Code_Name>
<pi:Time_Off_Type><xsl:value-of select="substring-after($S2,'=')"/></pi:Time_Off_Type>
<pi:Time_Off_Date><xsl:value-of select="substring-before($S2,',')"/></pi:Time_Off_Date>
<pi:Quantity><xsl:value-of select="substring-before(substring-after($S2,','),' ')"/></pi:Quantity>
<pi:Unit_of_Time><xsl:value-of select="substring-after(substring-before($S2,'='),' ')"/></pi:Unit_of_Time>
</pi:Time_Off>
</xsl:for-each>
</xsl:template>
问题在于,我收到的错误是:不允许多个项目的序列作为子串的第一个参数。
落在pi:Strike_1上的所有字符串都汇集在一起。它应该为每个员工处理,但它不会发生。 pi:Strike_2将处理,因为只有第二名员工有pi:Strike_2。
我想要的结果是:
<pi:PEE xmlns:pi="urn:com.workday/picof">
<pi:Employee>
<pi:Name>NAME ONE</pi:Name>
<pi:Time_Off>
<pi:Code_Name>Unpaid Time Off</pi:Code_Name>
<pi:Time_Off_Type>9570</pi:Time_Off_Type>
<pi:Time_Off_Date>2017-09-14</pi:Time_Off_Date>
<pi:Quantity>8</pi:Quantity>
<pi:Unit_of_Time>Hours</pi:Unit_of_Time>
</pi:Time_Off>
<pi:Time_Off>
<pi:Code_Name>Unpaid Time Off</pi:Code_Name>
<pi:Time_Off_Type>9570</pi:Time_Off_Type>
<pi:Time_Off_Date>2017-09-11</pi:Time_Off_Date>
<pi:Quantity>8</pi:Quantity>
<pi:Unit_of_Time>Hours</pi:Unit_of_Time>
</pi:Time_Off>
</pi:Employee>
<pi:Employee>
<pi:Name>NAME TWO</pi:Name>
<pi:Time_Off>
<pi:Code_Name>Unpaid Time Off</pi:Code_Name>
<pi:Time_Off_Type>9570</pi:Time_Off_Type>
<pi:Time_Off_Date>2017-09-10</pi:Time_Off_Date>
<pi:Quantity>8</pi:Quantity>
<pi:Unit_of_Time>Hours</pi:Unit_of_Time>
</pi:Time_Off>
<pi:Time_Off>
</pi:Employee>
</pi:PEE>
我该如何解决这个问题?我该怎么做才能使代码工作?非常感谢!