使用XSL从XML标记获取所有数据

时间:2018-05-21 05:46:01

标签: xml csv xslt xpath

嗨,我有一个像

这样的XML数据
<data>
      <Id>T2351</Id>
      <Name>Sam</Id>
</data>

我正在使用XSL从每个ID和Name标签中提取数据并将其放在csv文件中。我的XSL代码看起来像这样,

<xsl:template match="/"> Id,Name
<xsl:for-each select="//data">
<xsl:value-of select="concat(Id,',',Name,'&#xA;')"/>
</xsl:for-each>
</xsl:template>

但问题有时在数据中名称有多个值,如&#34; Sam,Tien&#34;并且只要有逗号,数据就会被分成csv中的不同列,我必须停止。我是XSL的新手,因此无法弄清楚应该解决这个问题的解决方案。任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:0)

CSV中包含逗号的值的常用方法是将值括在引号中。

对于你的情况,看起来像这样:

<xsl:template match="/">Id,Name
  <xsl:for-each select="//data">
    <xsl:value-of select="concat(Id, ',&quot;', Name, '&quot;&#xA;')"/>
  </xsl:for-each>
</xsl:template>

答案 1 :(得分:0)

您可以执行以下操作,它可能对您有帮助。

<xsl:template match="text()[contains(., ', ')]">
   <xsl:value-of select="concat('&quot;', ., '&quot;')"/>
</xsl:template>

答案 2 :(得分:0)

最后这个工作

 create table Employees
 (
       EmployeeID INT IDENTITY (1,1) PRIMARY KEY NOT NULL,
       EmployeeName VARCHAR(255) NOT NULL,
       EmployeeUsername VARCHAR(255) NOT NULL,
       EmployeeEmail VARCHAR(255) NOT NULL,
       GroupID INT FOREIGN KEY REFERENCES TypeOfGroup(GroupID),
       Password VARCHAR(255) NOT NULL
 );

 create table TypeOfGroup
 (
       GroupID INT IDENTITY(1,1) PRIMARY KEY NOT NULL,
       TypeGroup VARCHAR(255) NOT NULL,
       Permission CHAR(1) NOT NULL
 );

只有这样,csv才能跳过任何字段值内的逗号