我正在尝试确定一个简单而有效的过程,用于将数据从excel导出到XML,同时将某些字段包装在CDATA标记中。我已经达到了导出XML的程度(使用概述here的过程),但是我坚持使用注入CDATA标记来包装某些字段值的最佳方法。我进行了广泛的搜索,但没有找到解决方案。如果可能的话,我不希望在我的Excel数据中包含实际的CDATA标签。
当前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有可能吗?
我并不依赖于我正在使用的流程,所以如果有更好的方法,我会对如何集体解决的其他想法持开放态度。我喜欢Excel XML导出功能,因为它简单而且有效。我不是XML / VBA大师,但我有能力。
提前致谢!
======================================
编辑[2015年7月15日]: Martijn很乐意提供使用XSLT的方法,但想知道是否有更精简的东西可以实现这一目标?
答案 0 :(得分:0)
您可以使用以下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"><![CDATA[</xsl:text>
<xsl:apply-templates />
<xsl:text disable-output-escaping="yes">]]></xsl:text>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>