2014-10-22 67 views
0

我想创建一个样式表来将XML转换为其他格式的XML,并且在此过程中它应该创建放置在单独文件夹中的多个XML文件。我尝试使用的XML文件非常大(〜50000行),我想将它自动化。所以我不必硬编码每个部分。举例来说,如果我有一个简单的XML如下所示:用XSLT创建多个XML文件和文件夹

<Site> 
<element run="test1"> 
    <property name="aaa"/> 
    <property name="bbb"/> 
    <property name="ccc"/> 
    <element run="test2"> 
     <property name="aaa"/> 
     <property name="bbb"/> 
     <property name="ccc"/> 
     <element run="test3"> 
      <property name="aaa"/> 
      <property name="bbb"/> 
      <property name="ccc"/> 
     </element> 
    </element> 
</element> 

XSLT应该创建一个名为test1文件夹,并有test2test3的子文件夹(test1/test2/test3)与由子节点property的XML在同一个文件夹中。所以每个文件夹都应该有小的XML。

回答

1

尝试大意如下:

<xsl:template match="Site"> 
    <xsl:apply-templates select="//element"/> 
</xsl:template> 

<xsl:template match="element"> 
    <xsl:result-document href="{string-join(ancestor-or-self::element/@run, '/')}/properties.xml"> 
    <root> 
     <xsl:copy-of select="property"/> 
    </root> 
    </xsl:result-document> 
</xsl:template> 
+0

感谢您的快速答复! 你能不能指点我一些教程,在那里我可以了解这可能是什么? ''{string-join(ancestor-or-self :: element/@ run,'/')}' 我假设这会是某种XPath表达式的?? – Artiom 2014-10-22 13:29:24

+0

'{expression}'语法是语法XSLT定义为属性值模板(http://www.w3.org/TR/xslt20/#dt-attribute-value-template),您可以在其中将XPath表达式放在大括号中以计算属性值(的部分) 。表达式'string-join(ancestor-or-self :: element/@ run,'/')'确实是一个XPath(2.0)表达式,只是对'string-join'函数的一个函数调用,参见http: //maxtoroq.github.io/xpath-ref/以供参考或使用XPath 2.0教程。 – 2014-10-22 13:37:36