【发布时间】:2021-11-25 11:10:00
【问题描述】:
我想使用 Inno Setup 从 XmlDocument 中删除评论标记。我的 xml 看起来大概是这样的。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<services>
<service name="AuthenticationService">
<!--
<endpoint contract="System.Web.ApplicationServices.AuthenticationService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
-->
</service>
</services>
</system.serviceModel>
</configuration>
我想使用 Inno Setup 取消注释该部分
<endpoint>
...
</endpoint>
,所以删除它周围的评论标签。
我从here 发现这可以使用以下过程完成:
- 获取评论节点的值
- 使用步骤 1 中的值创建一个新的 XmlNode
- 删除评论节点
- 将步骤 2 中的新节点添加到 DOM 树中
不幸的是,答案中的示例是用 C# 编写的。
if (commentNode != null)
{
XmlReader nodeReader = XmlReader.Create(new StringReader(commentNode.Value));
XmlNode newNode = xdoc.ReadNode(nodeReader);
commentNode.ParentNode.ReplaceChild(newNode, commentNode);
}
到目前为止,我还没有找到如何使用 Inno Setup 实现 XmlReader。所以,我尝试了这个。
APath := '//configuration/system.serviceModel/services/service/comment()';
XMLCommentNode := XMLDoc.selectSingleNode(APath);
if Not (IDispatch(XMLCommentNode) = nil) then
begin
Log('Remove comment tag ' + APath + ' value is: ' + XMLCommentNode.Text);
newNode := XMLDoc.createElement(XMLCommentNode.Text);
XMLCommentNode.ParentNode.ReplaceChild(newNode, XMLCommentNode);
end
当我将 XMLCommentNode 的文本值写入日志时,我觉得它是正确的。
[08.59.44,190] Remove comment tag //configuration/system.serviceModel/services/service/comment() value is:
<endpoint contract="System.Web.ApplicationServices.AuthenticationService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
但是,在创建新元素时,我收到一条错误消息
Internal error: Expression error 'Runtime error (at 20:2651):
msxml3.dll: This name may not contain the '
' character:
-->
<-- <endpoint contract="System.Web.ApplicationServices.AuthenticationService">
<identity>
<dns value="localhost" />
...
'
如何处理和纠正这个错误?
【问题讨论】:
-
createElement不能接受 XML 片段。我什至不确定DOMDocumentAPI 中是否有这样的功能。您是否考虑过从(纯文本)文件中删除<!--和-->? -
是的,我稍微考虑过从纯文本中删除 ,但还没有开始实施。该 xml 文件中还有许多其他 cmets,因此到目前为止找到正确的 cmets 似乎太难了。
-
正如我之前写的,我认为
DOMDocumentAPI 中没有这样的功能。appendXML似乎是 PHP 独有的。
标签: xml inno-setup xmldocument xml-comments