我正在使用 XSLT 将 XML 文件转换为 Excel 可以分隔的格式(示例代码稍后显示)。例如,在 Excel 中打开时,分隔版本可能类似于:
+---------------+---------------+----------+
|URL |Title | Version |
+---------------+---------------+----------+
|dogs_are_cool |Dogs are cool | May 2013 |
+---------------+---------------+----------+
问题与每个 URL 都在末尾附加的版本有关。使用前面的示例,dogs_are_cool
实际上是dogs_are_cool_may2013.html
.
我想对该附加版本做两件事:
- 打印 URL 时删除版本。
- 重新格式化并打印版本。
我猜最好的方法是通过某种方式将 URL 拆分为下划线。然后将最后一个元素拆分到一个变量中并按顺序打印其他元素 - 将下划线重新插入。
我不知道该怎么做。
示例 XML:
<contents Url="toc_animals_may2013.html" Title="Animals">
<contents Url="toc_apes_may2013.html" Title="Apes">
<contents Url="chimps_may2013.html" Title="Some Stuff About Chimps" />
</contents>
<contents Url="toc_cats" Title="Cats">
<contents Url="hairless_cats_may2013.html" Title="OMG Where Did the Hair Go?"/>
<contents Url="wild_cats_may2013.html" Title="These Things Frighten Me"/>
</contents>
<contents Url="toc_dogs_may2013.html" Title="Dogs">
<contents Url="toc_snorty_dogs_may2013.html" Title="Snorty Dogs">
<contents Url="boston_terriers_may2013.html" Title="Boston Terriers" />
<contents Url="french_bull_dogs_may2013.html" Title="Frenchies" />
</contents>
</contents>
</contents>
示例 XSLT:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" indent="no"/>
<!-- This variable sets the delimiter symbol that Excel will use to seperate the cells -->
<xsl:variable name="delimiter">@</xsl:variable>
<xsl:template match="contents">
<!-- Prints the URL -->
<xsl:value-of select="@Url"/>
<xsl:copy-of select="$delimiter" />
<!-- Prints the title -->
<xsl:apply-templates select="@Title"/>
<xsl:copy-of select="$delimiter" />
<!-- I'd like to print the version here -->
<xsl:copy-of select="$delimiter" />
<xsl:template match="/">
<xsl:apply-templates select="//contents"/>
</xsl:template>
</xsl:stylesheet>