我有一个XML文件目录...例如:
result.xml
result2.xml
result3.xml
resultNth.xml (because there is an unknown amount of files)
每个结果文件中的模式基本相同
<Succeeded>
<someStrongXMLObject>
</someStrongXMLObject>
</Succeeded>
我的问题是 - 我可以在该目录中包含1个名为results.xml的XML文件......以及将格式化结果的XSL文件...
我想从所有结果文件中创建摘要...以便所有这些文件中的数据都包含在摘要中。
这可能吗?不使用任何C# - 只是标准的XML,XSLT?
更新
我不期望一个解决方案,只是一个点头,是的可能,或一个响亮的没有..我需要实现一些C#。此外,我希望目录结构为YYYY / MM / DD - 这样我就可以获得摘要XML文件,它将递归思想子目录...并创建月度和年度摘要。
答案 0 :(得分:2)
是的,这绝对是可能的。
它的简单程度取决于您的文件名和文件夹名称图案的可靠性。您可以使用document() function检查结果文件是否存在。使用递归来继续查找下一个按顺序命名的文件,直到结束。
从您的示例文件名中,可以使用以下XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<summary>
<xsl:call-template name="getResults">
<!--First call, use empty index -->
<xsl:with-param name="index" />
</xsl:call-template>
</summary>
</xsl:template>
<xsl:template name="getResults">
<xsl:param name="index" />
<xsl:variable name="filename">
<xsl:choose>
<xsl:when test="$index =''">
<xsl:value-of select="concat('result', '.xml')" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat('result', $index, '.xml')" />
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:choose>
<!--Check for the presence of the file -->
<xsl:when test="document($filename)">
<!--If it exists, then output something from the document-->
<Result>
<xsl:attribute name="href">
<xsl:value-of select="$filename" />
</xsl:attribute>
<xsl:copy-of select="document($filename)/Succeeded" />
</Result>
<!--Then, call the function with a new index value to look for the next file-->
<xsl:call-template name="getResults">
<xsl:with-param name="index">
<xsl:choose>
<!--If empty index, start at 1 -->
<xsl:when test="$index=''">
<xsl:value-of select="1" />
</xsl:when>
<xsl:otherwise>
<!--Add 1 to the previous index value -->
<xsl:value-of select="number($index+1)" />
</xsl:otherwise>
</xsl:choose>
</xsl:with-param>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:comment>Done looking for Results. Found <xsl:value-of select="number($index)" /> files.</xsl:comment>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
我在与XSLT相同的文件夹中运行了3个结果文档(即result.xml,result1.xml,result2.xml)并生成以下输出:
<?xml version="1.0" encoding="utf-8"?>
<summary>
<Result href="result.xml">
<Succeeded>
<someStrongXMLObject>
</someStrongXMLObject>
</Succeeded>
</Result>
<Result href="result1.xml">
<Succeeded>
<someStrongXMLObject>
</someStrongXMLObject>
</Succeeded>
</Result>
<Result href="result2.xml">
<Succeeded>
<someStrongXMLObject>
</someStrongXMLObject>
</Succeeded>
</Result>
<!--Done looking for Results. Found 3 files.-->
</summary>