子串的参数

时间:2017-09-12 10:05:41

标签: xml xslt-2.0

我有一个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>

我该如何解决这个问题?我该怎么做才能使代码工作?非常感谢!

0 个答案:

没有答案