0

我有以下xml:

<!-- language: lang-xml -->

<Report_Entry>
<Employee_ID> 1 </Employee_ID>
<First_Name>John</First_Name>
<Last_Name>Smith</Last_Name>
<Primary_Address>4200 Holly Hall Street, #18</Primary_Address>
<Hire_Date>2000-01-02-08:00</Hire_Date>
</Report_Entry>

<Report_Entry>
<Employee_ID> 2 </Employee_ID>
<First_Name>Julie</First_Name>
<Last_Name>Ray</Last_Name>
<Primary_Address>255 Gregor Street</Primary_Address>
<Hire_Date>2000-05-01-08:00</Hire_Date>
</Report_Entry>

我有 500 个这样的报告条目元素。我希望输出为:

1, John, Smith, 4200 Holly Hall Street #18, 01-02-2000
2, Julie, Ray, 255 Gregor Street, 05-01-2000
等等......

这是我为转换上述 XML 而编写的 XSLT 代码:

<!-- language: lang-xslt -->
<xsl:template match="Report_Entry">
<xsl:for-each select="*">
     <xsl:value-of select="."/>
          <xsl:if test="position() != last()">
              <xsl:value-of select="','"/>
          </xsl:if>
</xsl:for-each>
<xsl:text>&#10;</xsl:text>   

</xsl:template>

我无法完成两件事:

  1. 我想用空格替换 Primary_Address 元素中的每个逗号
  2. 将 Hire_Date 元素的日期格式更改为所需的格式 (mm-dd-yyyy)

如果有人能帮助我解决上述两个问题,我将不胜感激......

4

1 回答 1

1

要将逗号替换为空格,您可以使用translate功能。

<xsl:value-of select="translate(., ',', ' ')"/>

不过要小心,如果您以前没有见过这个功能,因为它的工作方式与普通的“替换”功能完全不同。它仅将单个字符转换为其他字符。它不会用其他字符串替换匹配的字符串。(注意,如果您使用的是 XSLT 2.0,则有一个“替换”功能可用)。

至于格式化日期,您可以在此处使用 substring 函数重新排列字段,假设 Hire_Date 始终采用相同的格式。

 <xsl:value-of select="concat(substring(., 6, 2), '-', substring(., 9, 2), '-' , substring(., 1, 4))"/>

需要注意的一点是,重新安排 XSLT 以使用模板而不是xsl:for-each可能值得。这将有助于编写 Hire_Date 的代码,就像它在自己的模板中一样。此外,如果Hire_Date始终是最后一个元素,这将允许您删除该位置的xsl:if测试。

试试这个 XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="Report_Entry">
    <xsl:apply-templates select="*" />
    <xsl:text>&#10;</xsl:text>
  </xsl:template>

  <xsl:template match="Report_Entry/*[not(self::Hire_Date)]">
    <xsl:value-of select="translate(., ',', ' ')"/>
    <xsl:value-of select="','"/>
  </xsl:template>

  <xsl:template match="Hire_Date">
    <xsl:value-of select="concat(substring(., 6, 2), '-', substring(., 9, 2), '-' , substring(., 1, 4))"/>
  </xsl:template>
</xsl:stylesheet>
于 2013-09-03T07:50:09.217 回答