2011-03-05 3 views
0

dans un fichier XML valide, j'ai la section suivante:Remplacer xComment avec son contenu

<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> 

-je charger à l'aide XDocument et peut alors récupérer la liste des commentaires en utilisant xComment - mais suppose que je veux seulement le premier:

var xComment = (doc.Elements().DescendantNodes().OfType<XComment>().First(); 

Je veux maintenant remplacer ce commentaire avec son contenu réel:

xComment.ReplaceWith(xComment.Value); 

Cependant, ce que je reçois en sortie:

<PropertyGroup> 
    <WorkingDir>C:\SomeFolder\</WorkingDir> 
</PropertyGroup> 
<ItemGroup> 
    <Files Include="$(WorkingDir)**\*.txt" /> 
    &lt;Files Include="$(WorkingDir)**\*.log" /&gt; 
    <Files Include="$(WorkingDir)**\*.bat" /> 
    <!--<Files Include="$(WorkingDir)**\*.ps1" /> 
    <Files Include="$(WorkingDir)**\*.psm" />--> 
    <Files Include="$(WorkingDir)**\*.cmd" /> 
</ItemGroup> 

Si la sortie I le contenu de xComment.Value séparément (en utilisant par exemple Console.WriteLine(),), je reçois <Files Include="$(WorkingDir)**\*.log" /> - donc ce qui se passe aux crochets lors de l'utilisation XNode.ReplaceWith()? Comment s'assurer que la mise en forme des caractères est préservée?

Répondre

2

Eh bien, vous devez analyser le code XML dans le commentaire d'abord, c'est-à-dire xComment.ReplaceWith(XElement.Parse(xComment.Value)). Cela devrait fonctionner tant que le commentaire contient le balisage d'un seul noeud d'élément, comme c'est le cas pour le premier commentaire de votre échantillon. Dans un cas plus général (c'est-à-dire lorsque le commentaire contient un balisage pour plus d'un élément ou autre pour d'autres nœuds), vous avez besoin de xComment.ReplaceWith(XElement.Parse("<dummy>" + xComment.Value + "</dummy>").Nodes()).

Questions connexes