我想使用 XSLT 将 XML 转换为 CSV,但是当从名为 XML To CSV XSLT 的 SO 线程应用 XSL 时反对我的意见:

<WhoisRecord> 
  <DomainName>127.0.0.1</DomainName> 
  <RegistryData> 
    <AbuseContact> 
      <Email>abuse@iana.org</Email> 
      <Name>Internet Corporation for Assigned Names and Number</Name> 
      <Phone>+1-310-301-5820</Phone> 
    </AbuseContact> 
    <AdministrativeContact i:nil="true"/> 
    <BillingContact i:nil="true"/> 
    <CreatedDate/> 
    <RawText>...</RawText> 
    <Registrant> 
      <Address>4676 Admiralty Way, Suite 330</Address> 
      <City>Marina del Rey</City> 
      <Country>US</Country> 
      <Name>Internet Assigned Numbers Authority</Name> 
      <PostalCode>90292-6695</PostalCode> 
      <StateProv>CA</StateProv> 
    </Registrant> 
    <TechnicalContact> 
      <Email>abuse@iana.org</Email> 
      <Name>Internet Corporation for Assigned Names and Number</Name> 
      <Phone>+1-310-301-5820</Phone> 
    </TechnicalContact> 
    <UpdatedDate>2010-04-14</UpdatedDate> 
    <ZoneContact i:nil="true"/> 
  </RegistryData> 
</WhoisRecord> 

I end up with:

  abuse@iana.orgInternet Corporation for Assigned Names and Number+1-310-301-5820, 
    , 
    , 
    , 
    ...,       
    4676 Admiralty Way, Suite 330Marina del ReyUSInternet Assigned Numbers Authority90292-6695CA,       
    abuse@iana.orgInternet Corporation for Assigned Names and Number+1-310-301-5820,       
    2010-04-14, 

我的问题是,由此产生的转换缺少节点(如包含 IP 地址的 DomainName 元素),并且一些子节点没有逗号连接(如 AbuseContact 的子节点)。

我想查看 CSV 格式的所有 XML 输出和字符串,如:“abuse@iana.orgInternet Corporation for Assigned Names and Number+1-310-301-5820”,以逗号分隔。

我的 XSL 非常生疏。感谢您的帮助。 :)

这是我正在使用的 XSL:








,





请您参考如下方法:

这个简单的转换产生了想要的结果 :

<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="/"> 
    <xsl:apply-templates select="//text()"/> 
    </xsl:template> 
 
    <xsl:template match="text()"> 
      <xsl:copy-of select="."/> 
      <xsl:if test="not(position()=last())">,</xsl:if> 
    </xsl:template> 
</xsl:stylesheet> 

请注意 指某东西的用途:
 <xsl:strip-space elements="*"/> 

丢弃任何只有空白的文本节点。

更新 :AJ 提出了结果应该按每行记录/元组分组的问题。问题中没有定义记录/元组究竟应该是什么。因此,当前的解决方案解决了纯空白文本节点和缺少逗号两个问题,但并不旨在将输出抓取到记录/元组中。


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!