【问题标题】:Exporting XML from Excel with CDATA tags使用 CDATA 标记从 Excel 导出 XML
【发布时间】:2015-07-09 13:29:54
【问题描述】:

我正在尝试确定一种将数据从 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 的方法,但想知道是否有更精简的方法可以实现这一目标?

【问题讨论】:

    标签: xml excel vba export cdata


    【解决方案1】:

    您可以使用以下 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>
    

    【讨论】:

    • @Martijin - 我使用了您的代码并创建了一个名为 Product_SEO_Export.xsl 的文件。然后我添加了“”到我的 Product_SEO_Export.xml 文件。这些在同一个本地文件夹中。我在 Chrome 中打开 XML 文件并查看源代码,但只看到我的原始 XML。在 IE 11 中,我收到错误消息“无法显示 XML 页面。缺少必需的属性‘选择’。”我做错了什么?
    • 你是对的。我复制了错误的代码。正确答案现在在更新的答案中。我希望这对你有用。
    • @Martijin - 非常感谢您付出的时间和精力。您更正的代码有效 - 从某种意义上说,它正在呈现纯文本(例如 1 test-url Test Title )。但是,我想在原始问题帖子中生成类似于我想要的 xml 代码示例的输出。我将获取输出 XML 并上传到 CMS,这要求它采用 XML 格式,并且 CDATA 标记包含某些字符串字段。想知道这是否是实现该目标的最佳方法?
    • 如果您查看浏览器的 DOM(例如,在 FireFox 中使用 firebug),您可以看到 XML 采用了所需的格式。我相信这也将在您的 CMS 中发挥作用。
    • 感谢您的回复。请注明答案为选中的答案,。
    猜你喜欢
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多