1

在 MSDEPLOY.EXE 部署期间,我试图将参数喷射到 XML 配置文件中,但配置值存储在 CDATA 元素中。以下是名为 paths.xml 的文件的内容:

<?xml version="1.0" encoding="UTF-8"?>
<course>
  <questionnaires><![CDATA[https://www.site.com/somepage.asp]]></questionnaires>    
</course>

我需要将该 URL 转换为不同的东西,但我无法为我的 parameters.xml 文件找出正确的 XPATH 和语法,这就是我现在得到的:

<?xml version="1.0" encoding="utf-8"?>
<parameters>
  <parameter name="QuestPath" description="Questionnaires path" defaultValue="&lt;questionnaires&gt;&lt;![CDATA[https://www.foo.com/somepage.asp]]&gt;&lt;/questionnaires&gt;" tags="">
    <parameterEntry kind="XmlFile" scope="paths.xml$" match="/course/questionnaires" />
  </parameter>
</parameters>

我在引用 CDATA 元素来替换它时运气不佳,因此您可以看到我现在正在尝试替换整个问卷元素,包括其 CDATA 内容。我不得不对嵌入的尖括号进行一些转义,因此不会因为无效的 XML 格式而拒绝 parameters.xml。

现在,生成的 paths.xml 最终如下:

<?xml version="1.0" encoding="UTF-8"?>
<course>
  <questionnaires>https://www.foo.com/somepage.asp</questionnaires> 
</course>

因此,某些东西仅将 CDATA 元素解析为它的内容,并且 CDATA 不再出现在 paths.xml 中,我认为这将导致读取它的程序失败。帮助!

4

1 回答 1

2

好的 - 我找到了一个更简单的解决方案。与参与在我们的服务器上保存此配置 XML 文件的开发人员一起,我们对其进行了更改,使元素仅包含原始 URL,完全放弃了 CDATA 结构。

在测试消费应用程序似乎仍然可以正常工作后,我们同意不需要它们,因此我能够在引用的节点上执行正常的 XmlFile 替换,例如:

...match="/course/questionnaires/text()"
于 2013-06-28T14:43:31.120 回答