我试图找出我的xsl文件有什么问题。这是我的示例xml文件:
.PHONY: clean
这是我的xsl文件:
<?xml version="1.0" encoding="UTF-8"?>
<session xmlns="http://winscp.net/schema/session/1.0" name="user@host" start="2015-12-30T14:55:40.156Z">
<ls>
<destination value="/test/folder" />
<files>
<file>
<filename value="folder1" />
<type value="d" />
<modification value="2015-03-04T21:09:25.000Z" />
<permissions value="rwxrw-rw-" />
</file>
<file>
<filename value="folder2" />
<type value="d" />
<modification value="2015-03-04T21:08:47.000Z" />
<permissions value="rwxrw-rw-" />
</file>
<file>
<filename value="folder3" />
<type value="d" />
<modification value="2015-03-04T21:08:57.000Z" />
<permissions value="rwxrw-rw-" />
</file>
<file>
<filename value="folder4" />
<type value="d" />
<modification value="2015-03-04T21:09:14.000Z" />
<permissions value="rwxrw-rw-" />
</file>
<file>
<filename value="file1.txt" />
<type value="-" />
<size value="113" />
<modification value="2015-12-30T14:55:07.000Z" />
<permissions value="rw-rw-rw-" />
</file>
</files>
<result success="true" />
</ls>
</session>
我得到的输出是:
<?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" version="1.0" encoding="UTF-8" indent="no"/>
<xsl:template match="/">
<xsl:text>filename,filedatetime,filetype</xsl:text>
<xsl:text> </xsl:text>
<xsl:apply-templates select="file"/>
<xsl:text>-eof-</xsl:text>
</xsl:template>
<xsl:template match="file">
<xsl:text>"</xsl:text>
<xsl:value-of select="filename/@value" />
<xsl:text>","</xsl:text>
<xsl:value-of select="modification/@value" />
<xsl:text>","</xsl:text>
<xsl:value-of select="type/@value" />
<xsl:text>"</xsl:text>
<xsl:text> </xsl:text>
</xsl:template>
</xsl:stylesheet>
我似乎无法弄清楚如何获取&#34; filename&#34;,&#34;修改&#34;的值。和&#34;键入&#34;元素。任何帮助将不胜感激。
答案 0 :(得分:1)
第<xsl:apply-templates select="file"/>
行只会匹配file
类型的根节点的直接子节点,并且不存在任何类型的节点。
如果您想要任何深度的所有file
个孩子,您可以使用<xsl:apply-templates select="//file"/>
代替。
XML具有默认命名空间,因此XSL中的元素不会匹配,除非它们的命名空间也匹配。
以下似乎有效(请注意xx
命名空间的定义和使用):
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xx="http://winscp.net/schema/session/1.0">
<xsl:output method="text" version="1.0" encoding="UTF-8" indent="no"/>
<xsl:template match="/">
<xsl:text>filename,filedatetime,filetype</xsl:text>
<xsl:text> </xsl:text>
<xsl:apply-templates select="//xx:file" />
<xsl:text>-eof-</xsl:text>
</xsl:template>
<xsl:template match="xx:file">
<xsl:text>"</xsl:text>
<xsl:value-of select="xx:filename/@value" />
<xsl:text>","</xsl:text>
<xsl:value-of select="xx:modification/@value" />
<xsl:text>","</xsl:text>
<xsl:value-of select="xx:type/@value" />
<xsl:text>"</xsl:text>
<xsl:text> </xsl:text>
</xsl:template>
</xsl:stylesheet>