在字符串之间放一个字符

时间:2017-11-07 11:42:40

标签: xml xslt-2.0

我有这个包含以下内容的XML文件:

<wd:Report_Data xmlns:wd="urn:com.workday.report/INT005_">
<wd:Report_Entry>
    <wd:PERNR>00000001</wd:PERNR>
    <wd:HR_PARTNER>
        <wd:HR_BUSINESS_PART>A</wd:HR_BUSINESS_PART>
    </wd:HR_PARTNER>
    <wd:HR_PARTNER>
        <wd:HR_BUSINESS_PART>B</wd:HR_BUSINESS_PART>
    </wd:HR_PARTNER>
</wd:Report_Entry>
<wd:Report_Entry>
    <wd:PERNR>00000002</wd:PERNR>
    <wd:HR_PARTNER>
        <wd:HR_BUSINESS_PART>C</wd:HR_BUSINESS_PART>
    </wd:HR_PARTNER>
    <wd:HR_PARTNER>
        <wd:HR_BUSINESS_PART>D</wd:HR_BUSINESS_PART>
    </wd:HR_PARTNER>
    <wd:HR_PARTNER>
        <wd:HR_BUSINESS_PART>E</wd:HR_BUSINESS_PART>
    </wd:HR_PARTNER>
</wd:Report_Entry>
</wd:Report_Data>

我正在使用XSLT代码:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet exclude-result-prefixes="wd"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
xmlns:wd="urn:com.workday.report/INT005_">

<xsl:output indent="yes" method="xml" />
<xsl:strip-space elements="*" />

<xsl:template match="wd:Report_Data">
    <wd:Report_Data>
      <xsl:for-each select="wd:Report_Entry">
      <wd:Report_Entry>
       <wd:PERNR><xsl:value-of select="wd:PERNR"/></wd:PERNR>
       <wd:HR_BUSINESS_PART>
         <xsl:apply-templates select="wd:HR_PARTNER/*"/>
       </wd:HR_BUSINESS_PART>
      </wd:Report_Entry>
      </xsl:for-each>
    </wd:Report_Data>
</xsl:template>

<xsl:template match="wd:HR_PARTNER">
    <xsl:apply-templates select="ancestor::wd:Report_Entry">
        <xsl:with-param name="HRBP" select="current()" />
    </xsl:apply-templates>
</xsl:template>

<xsl:template match="/wd:HR_PARTNER">
    <xsl:param name="HRBP"/>
    <wd:HR_BUSINESS_PART>
        <xsl:value-of select="$HRBP"/>
    </wd:HR_BUSINESS_PART>
</xsl:template> 
</xsl:stylesheet>

这似乎工作正常,但我需要在wd:HR_BUSINESS_PART的值之间加一个空格。我编码不是很好,所以我不确定在这里使用的其他方法。有人知道我该怎么做才能让我的最终输出看起来像这样吗?

<?xml version="1.0" encoding="UTF-8"?>
<wd:Report_Data xmlns:wd="urn:com.workday.report/INT005_">
  <wd:Report_Entry>
    <wd:PERNR>00000001</wd:PERNR>
    <wd:HR_BUSINESS_PART>A B</wd:HR_BUSINESS_PART>
  </wd:Report_Entry>
  <wd:Report_Entry>
    <wd:PERNR>00000002</wd:PERNR>
    <wd:HR_BUSINESS_PART>C D E</wd:HR_BUSINESS_PART>
  </wd:Report_Entry>
</wd:Report_Data>

1 个答案:

答案 0 :(得分:2)

而不是

   <wd:HR_BUSINESS_PART>
     <xsl:apply-templates select="wd:HR_PARTNER/*"/>
   </wd:HR_BUSINESS_PART>

只需使用

   <wd:HR_BUSINESS_PART>
     <xsl:value-of select="wd:HR_PARTNER/wd:HR_BUSINESS_PART" separator=" "/>
   </wd:HR_BUSINESS_PART>

空格是分隔符,甚至是具有value-of属性(https://www.w3.org/TR/xslt20/#value-of)的select的默认值,因此您只需使用

   <wd:HR_BUSINESS_PART>
     <xsl:value-of select="wd:HR_PARTNER/wd:HR_BUSINESS_PART"/>
   </wd:HR_BUSINESS_PART>