Web部署XML配置文件的参数化,其中设置嵌入在CDATA元素中

时间:2013-06-27 06:34:19

标签: msdeploy webdeploy

在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转换为不同的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中,我认为这会导致读取它的程序失败。救命啊!

1 个答案:

答案 0 :(得分:2)

好的 - 我找到了一个更简单的解决方案。与在我们的服务器上包含此配置XML文件的开发人员一起,我们更改了它,因此元素只包含原始URL,完全取消了CDATA结构。

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

...match="/course/questionnaires/text()"