在有效的XML文件中,我有以下部分:
<PropertyGroup>
<WorkingDir>C:\SomeFolder\</WorkingDir>
</PropertyGroup>
<ItemGroup>
<Files Include="$(WorkingDir)**\*.txt" />
<!--<Files Include="$(WorkingDir)**\*.log" />-->
<Files Include="$(WorkingDir)**\*.bat" />
<!--<Files Include="$(WorkingDir)**\*.ps1" />
<Files Include="$(WorkingDir)**\*.psm" />-->
<Files Include="$(WorkingDir)**\*.cmd" />
</ItemGroup>
我使用XDocument加载它,然后可以使用XComment检索注释列表 - 但假设我只想要第一个:
var xComment = (doc.Elements().DescendantNodes().OfType<XComment>().First();
我现在想用其实际内容替换此评论:
xComment.ReplaceWith(xComment.Value);
然而,这是我得到的输出:
<PropertyGroup>
<WorkingDir>C:\SomeFolder\</WorkingDir>
</PropertyGroup>
<ItemGroup>
<Files Include="$(WorkingDir)**\*.txt" />
<Files Include="$(WorkingDir)**\*.log" />
<Files Include="$(WorkingDir)**\*.bat" />
<!--<Files Include="$(WorkingDir)**\*.ps1" />
<Files Include="$(WorkingDir)**\*.psm" />-->
<Files Include="$(WorkingDir)**\*.cmd" />
</ItemGroup>
如果我单独输出xComment.Value
的内容(例如,使用Console.WriteLine()
),我会得到<Files Include="$(WorkingDir)**\*.log" />
- 所以当我使用XNode.ReplaceWith()
时,尖括号会发生什么?如何确保保留字符格式?
答案 0 :(得分:2)
您需要先在评论中解析XML,即xComment.ReplaceWith(XElement.Parse(xComment.Value))
。只要注释包含单个元素节点的标记,这应该有效,就像样本中第一个注释的情况一样。在更一般的情况下(即,当评论包含多个元素的标记或其他节点的其他元素时),您需要xComment.ReplaceWith(XElement.Parse("<dummy>" + xComment.Value + "</dummy>").Nodes())
。