我想使用 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 提出了结果应该按每行记录/元组分组的问题。问题中没有定义记录/元组究竟应该是什么。因此,当前的解决方案解决了纯空白文本节点和缺少逗号两个问题,但并不旨在将输出抓取到记录/元组中。




