对于文件夹中的每个文件,请包括 XML
本文关键字:文件 包括 XML 文件夹 | 更新日期: 2023-09-27 18:35:53
我有一个很长的XML,如下所示:
MainXML.xml:
<OpenTag>
<SubTag>Value 1</SubTag>
<SubTag>Value 2</SubTag>
<SubTag>Value 3</SubTag>
<SubTag>Value 4</SubTag>
</OpenTag>
除了SubTag
是一个更复杂的重复结构,有大量数据。 我不能以某种方式这样做吗?
子XML1.xml:
<SubTag>Value 1</SubTag>
子XML2.xml:
<SubTag>Value 2</SubTag>
子XML3.xml:
<SubTag>Value 3</SubTag>
SubXML4.xml:
<SubTag>Value 4</SubTag>
MainXML.xml:
<OpenTag>
... For Each XML File in the Sub-XML Folder, stick it here.
</OpenTag>
我意识到我可以使用基本的文件和字符串函数来做到这一点,但想知道是否有 XSL/XML 的本机方法可以做到这一点。
如果你对 LINQ to XML 没问题,这里有一个工作代码:
public static XDocument AggregateMultipleXmlFilesIntoASingleOne(string parentFolderPath, string fileNamePrefix)
{
return new XDocument(
new XElement("OpenTag",
Directory.GetFiles(parentFolderPath)
.Where(file => Path.GetFileName(file).StartsWith(fileNamePrefix))
.Select(XDocument.Load)
.Select(doc => new XElement(doc.Root))
.ToArray()));
}
不确定这是否正是您所追求的,但它似乎工作正常。它依赖于XSLT 2.0,希望你可以使用它。您还需要为子 XML 文件准备好一个文件夹:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<xsl:for-each select="//SubTag">
<xsl:result-document href="folder/SubXML{position()}.xml" method="xml">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:result-document>
</xsl:for-each>
<xsl:apply-templates />
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>