使用CDATA标签从Excel中导出XML

我试图确定一个简单高效的过程,用于将数据从excel导出到XML,同时将某些字段封装在CDATA标签中。 我已经到了导出XML的地步(使用这里概述的过程),但我坚持注入CDATA标签来包装特定字段值的最佳方法。 我已经广泛search,但没有find一个解决scheme。 如果可能的话,我不希望将实际的CDATA标签包含在我的Excel数据中。

当前XML代码示例(摘录):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <products xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <product> <code>1</code> <searchEngineSupportPages> <searchEngineSupportPage locale="en_US"> <siteSearchEngineSupports> <siteSearchEngineSupport siteCode="CH"> <urlValue>test-url</urlValue> <title>Test Title</title> <metaDescription>Test Desc</metaDescription> <metaKeywords>keyword, test</metaKeywords> </siteSearchEngineSupport> </siteSearchEngineSupports> </searchEngineSupportPage> </searchEngineSupportPages> </product> </products> 

所需的XML代码示例(通知CDATA标签):

 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <products xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <product> <code>1</code> <searchEngineSupportPages> <searchEngineSupportPage locale="en_US"> <siteSearchEngineSupports> <siteSearchEngineSupport siteCode="CH"> <urlValue>test-url</urlValue> <title>Test Title</title> <metaDescription><![CDATA[Test Desc]]></metaDescription> <metaKeywords><![CDATA[keyword, test]]></metaKeywords> </siteSearchEngineSupport> </siteSearchEngineSupports> </searchEngineSupportPage> </searchEngineSupportPages> </product> </products> 

有没有一种简单而有效的方法来确保导出的指定字段的XML包装在CDATA标签中? VBA是可能的吗?

我并不重视我正在使用的stream程,所以如果有更好的方法,我可以开始讨论如何共同解决。 我喜欢Excel的XML导出function,因为它的简单和有效。 我不是一个XML / VBA大师,但我有能力。

提前致谢!

======================================

编辑[2015年7月15日]: Martijn很友善地提供了一种使用XSLT的方法,但是想知道是否有更简化的东西来实现这个目标?

您可以使用以下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="xml"/> <xsl:template match="/"> <xsl:apply-templates /> </xsl:template> <xsl:template match="@*|*"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:template match="metaDescription|metaKeywords"> <xsl:copy> <xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text> <xsl:apply-templates /> <xsl:text disable-output-escaping="yes">]]&gt;</xsl:text> </xsl:copy> </xsl:template> </xsl:stylesheet>