[英]Title in CSV file when converting from XML to CSV using XML
我正在嘗試使用XSLT將XML轉換為CSV,正在獲取記錄,但是我需要CSV文件中的標題。
例如:
Name EmailAddress
Gaurav Gaur@yopmail.com
Satya Satya@yopmail.com
XML
<?xml version="1.0"?>
<SearchResults>
<Columns>
<Column Label="Name">Name</Column>
<Column Label="Email Addresses">EmailAddress</Column>
</Columns>
<Rows>
<Row>
<Name>Gaurav Joshi</Name>
<EmailAddress>ybenipohe-3888@yopmail.com</EmailAddress>
</Row>
<Row>
<Name>Satya</Name>
<EmailAddress>eqaddoxoqu-8703@yopmail.com</EmailAddress>
</Row>
XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<!-- This transform is used to generate a CSV file.-->
<xsl:output method="text" indent="no" />
<xsl:template match="/">
<xsl:apply-templates select="/SearchResults/Rows/Row" />
</xsl:template>
<xsl:template match="/SearchResults/Rows/Row">
<xsl:text>"</xsl:text>
<xsl:value-of select="position()" />
<xsl:text>"</xsl:text>
<xsl:for-each select="*">
<xsl:text>,"</xsl:text>
<xsl:value-of select="." />
<xsl:text>"</xsl:text>
</xsl:for-each>
<xsl:text>
</xsl:text>
</xsl:template>
<xsl:template match="/SearchResults/Columns" />
</xsl:stylesheet>
當前,您有一個匹配/SearchResults/Columns
的模板,此刻實際上是多余的,因為您沒有任何顯式選擇這些模板的模板(由於您執行<xsl:apply-templates select="/SearchResults/Rows/Row" />
)。
但是您可以輕松調整它以輸出標題,然后只需要一個xsl:apply-templates
即可選擇它。
試試這個XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<!-- This transform is used to generate a CSV file.-->
<xsl:output method="text" indent="no" />
<xsl:template match="/">
<xsl:apply-templates select="/SearchResults/Columns" />
<xsl:apply-templates select="/SearchResults/Rows/Row" />
</xsl:template>
<xsl:template match="Row">
<xsl:text>"</xsl:text>
<xsl:value-of select="position()" />
<xsl:text>"</xsl:text>
<xsl:for-each select="*">
<xsl:text>,"</xsl:text>
<xsl:value-of select="." />
<xsl:text>"</xsl:text>
</xsl:for-each>
<xsl:text> </xsl:text>
</xsl:template>
<xsl:template match="Columns">
<xsl:text>"Row"</xsl:text>
<xsl:for-each select="Column">
<xsl:text>,"</xsl:text>
<xsl:value-of select="@Label" />
<xsl:text>"</xsl:text>
</xsl:for-each>
<xsl:text> </xsl:text>
</xsl:template>
</xsl:stylesheet>
但這(大)假設是,每個Row
的子節點與相關Column
節點的順序相同。 如果不是這種情況,則您有工作要做。 嘗試用此模板替換匹配Row
的模板
<xsl:template match="Row">
<xsl:text>"</xsl:text>
<xsl:value-of select="position()" />
<xsl:text>"</xsl:text>
<xsl:variable name="Row" select="." />
<xsl:for-each select="/SearchResults/Columns/Column">
<xsl:text>,"</xsl:text>
<xsl:value-of select="$Row/*[name() = current()]" />
<xsl:text>"</xsl:text>
</xsl:for-each>
<xsl:text> </xsl:text>
</xsl:template>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.