读取XML并用C#中的Stringreader替换一些字符串

时间:2014-07-07 08:34:39

标签: c# xml wpf string replace

在WPF中使用C#,我保存了一个包含以下XElement的XML文件:

<Content>
&amp;lt;Rectangle StrokeThickness="2" ToolTip="Data" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:dd="clr-namespace:DiagramDesigner;assembly=ADAX_GUI"&amp;gt;&amp;lt;Rectangle.Style&amp;gt;&amp;lt;Style TargetType="Rectangle"&amp;gt;&amp;lt;Style.BasedOn&amp;gt;&amp;lt;Style TargetType="Rectangle"&amp;gt;&amp;lt;Style.Resources&amp;gt;&amp;lt;ResourceDictionary /&amp;gt;&amp;lt;/Style.Resources&amp;gt;&amp;lt;Setter Property="Shape.Fill"&amp;gt;&amp;lt;Setter.Value&amp;gt;&amp;lt;LinearGradientBrush StartPoint="0,0" EndPoint="0,1"&amp;gt;&amp;lt;LinearGradientBrush.GradientStops&amp;gt;&amp;lt;GradientStop Color="#FFFAFBE9" Offset="0" /&amp;gt;&amp;lt;GradientStop Color="#FFFFA500" Offset="1" /&amp;gt;&amp;lt;/LinearGradientBrush.GradientStops&amp;gt;&amp;lt;/LinearGradientBrush&amp;gt;&amp;lt;/Setter.Value&amp;gt;&amp;lt;/Setter&amp;gt;&amp;lt;Setter Property="Shape.Stroke"&amp;gt;&amp;lt;Setter.Value&amp;gt;&amp;lt;SolidColorBrush&amp;gt;#FFD69436&amp;lt;/SolidColorBrush&amp;gt;&amp;lt;/Setter.Value&amp;gt;&amp;lt;/Setter&amp;gt;&amp;lt;Setter Property="Shape.StrokeThickness"&amp;gt;&amp;lt;Setter.Value&amp;gt;&amp;lt;s:Double&amp;gt;1&amp;lt;/s:Double&amp;gt;&amp;lt;/Setter.Value&amp;gt;&amp;lt;/Setter&amp;gt;&amp;lt;Setter Property="Shape.StrokeLineJoin"&amp;gt;&amp;lt;Setter.Value&amp;gt;&amp;lt;x:Static Member="PenLineJoin.Round" /&amp;gt;&amp;lt;/Setter.Value&amp;gt;&amp;lt;/Setter&amp;gt;&amp;lt;Setter Property="Shape.Stretch"&amp;gt;&amp;lt;Setter.Value&amp;gt;&amp;lt;x:Static Member="Stretch.Fill" /&amp;gt;&amp;lt;/Setter.Value&amp;gt;&amp;lt;/Setter&amp;gt;&amp;lt;Setter Property="UIElement.IsHitTestVisible"&amp;gt;&amp;lt;Setter.Value&amp;gt;&amp;lt;s:Boolean&amp;gt;False&amp;lt;/s:Boolean&amp;gt;&amp;lt;/Setter.Value&amp;gt;&amp;lt;/Setter&amp;gt;&amp;lt;Setter Property="UIElement.SnapsToDevicePixels"&amp;gt;&amp;lt;Setter.Value&amp;gt;&amp;lt;s:Boolean&amp;gt;True&amp;lt;/s:Boolean&amp;gt;&amp;lt;/Setter.Value&amp;gt;&amp;lt;/Setter&amp;gt;&amp;lt;/Style&amp;gt;&amp;lt;/Style.BasedOn&amp;gt;&amp;lt;Style.Resources&amp;gt;&amp;lt;ResourceDictionary /&amp;gt;&amp;lt;/Style.Resources&amp;gt;&amp;lt;/Style&amp;gt;&amp;lt;/Rectangle.Style&amp;gt;&amp;lt;dd:DesignerItem.DragThumbTemplate&amp;gt;&amp;lt;ControlTemplate&amp;gt;&amp;lt;Rectangle Name="DataShape" Tag="DataShapeTag"&amp;gt;&amp;lt;Rectangle.Style&amp;gt;&amp;lt;Style TargetType="Rectangle"&amp;gt;&amp;lt;Style.BasedOn&amp;gt;&amp;lt;Style TargetType="Rectangle"&amp;gt;&amp;lt;Style.BasedOn&amp;gt;&amp;lt;Style TargetType="Rectangle"&amp;gt;&amp;lt;Style.Resources&amp;gt;&amp;lt;ResourceDictionary /&amp;gt;&amp;lt;/Style.Resources&amp;gt;&amp;lt;Setter Property="Shape.Fill"&amp;gt;&amp;lt;Setter.Value&amp;gt;&amp;lt;LinearGradientBrush StartPoint="0,0" EndPoint="0,1"&amp;gt;&amp;lt;LinearGradientBrush.GradientStops&amp;gt;&amp;lt;GradientStop Color="#FFFAFBE9" Offset="0" /&amp;gt;&amp;lt;GradientStop Color="#FFFFA500" Offset="1" /&amp;gt;&amp;lt;/LinearGradientBrush.GradientStops&amp;gt;&amp;lt;/LinearGradientBrush&amp;gt;&amp;lt;/Setter.Value&amp;gt;&amp;lt;/Setter&amp;gt;&amp;lt;Setter Property="Shape.Stroke"&amp;gt;&amp;lt;Setter.Value&amp;gt;&amp;lt;SolidColorBrush&amp;gt;#FFD69436&amp;lt;/SolidColorBrush&amp;gt;&amp;lt;/Setter.Value&amp;gt;&amp;lt;/Setter&amp;gt;&amp;lt;Setter Property="Shape.StrokeThickness"&amp;gt;&amp;lt;Setter.Value&amp;gt;&amp;lt;s:Double&amp;gt;1&amp;lt;/s:Double&amp;gt;&amp;lt;/Setter.Value&amp;gt;&amp;lt;/Setter&amp;gt;&amp;lt;Setter Property="Shape.StrokeLineJoin"&amp;gt;&amp;lt;Setter.Value&amp;gt;&amp;lt;x:Static Member="PenLineJoin.Round" /&amp;gt;&amp;lt;/Setter.Value&amp;gt;&amp;lt;/Setter&amp;gt;&amp;lt;Setter Property="Shape.Stretch"&amp;gt;&amp;lt;Setter.Value&amp;gt;&amp;lt;x:Static Member="Stretch.Fill" /&amp;gt;&amp;lt;/Setter.Value&amp;gt;&amp;lt;/Setter&amp;gt;&amp;lt;Setter Property="UIElement.IsHitTestVisible"&amp;gt;&amp;lt;Setter.Value&amp;gt;&amp;lt;s:Boolean&amp;gt;False&amp;lt;/s:Boolean&amp;gt;&amp;lt;/Setter.Value&amp;gt;&amp;lt;/Setter&amp;gt;&amp;lt;Setter Property="UIElement.SnapsToDevicePixels"&amp;gt;&amp;lt;Setter.Value&amp;gt;&amp;lt;s:Boolean&amp;gt;True&amp;lt;/s:Boolean&amp;gt;&amp;lt;/Setter.Value&amp;gt;&amp;lt;/Setter&amp;gt;&amp;lt;/Style&amp;gt;&amp;lt;/Style.BasedOn&amp;gt;&amp;lt;Style.Resources&amp;gt;&amp;lt;ResourceDictionary /&amp;gt;&amp;lt;/Style.Resources&amp;gt;&amp;lt;/Style&amp;gt;&amp;lt;/Style.BasedOn&amp;gt;&amp;lt;Style.Resources&amp;gt;&amp;lt;ResourceDictionary /&amp;gt;&amp;lt;/Style.Resources&amp;gt;&amp;lt;Setter Property="UIElement.IsHitTestVisible"&amp;gt;&amp;lt;Setter.Value&amp;gt;&amp;lt;s:Boolean&amp;gt;True&amp;lt;/s:Boolean&amp;gt;&amp;lt;/Setter.Value&amp;gt;&amp;lt;/Setter&amp;gt;&amp;lt;Setter Property="FrameworkElement.Height"&amp;gt;&amp;lt;Setter.Value&amp;gt;&amp;lt;s:Double&amp;gt;300&amp;lt;/s:Double&amp;gt;&amp;lt;/Setter.Value&amp;gt;&amp;lt;/Setter&amp;gt;&amp;lt;Setter Property="FrameworkElement.Width"&amp;gt;&amp;lt;Setter.Value&amp;gt;&amp;lt;s:Double&amp;gt;200&amp;lt;/s:Double&amp;gt;&amp;lt;/Setter.Value&amp;gt;&amp;lt;/Setter&amp;gt;&amp;lt;Setter Property="FrameworkElement.Tag"&amp;gt;&amp;lt;Setter.Value&amp;gt;DataShape&amp;lt;/Setter.Value&amp;gt;&amp;lt;/Setter&amp;gt;&amp;lt;/Style&amp;gt;&amp;lt;/Rectangle.Style&amp;gt;&amp;lt;/Rectangle&amp;gt;&amp;lt;/ControlTemplate&amp;gt;&amp;lt;/dd:DesignerItem.DragThumbTemplate&amp;gt;&amp;lt;/Rectangle&amp;gt;
</Content>

使用XElement.save函数保存输出XML文件。然后我读了这一行,想要替换所有那些“放大器”;空洞刺痛的叮咬,因为我确实喜欢这样:

//XML is the input file saved as mentioned above
string contentValue = XML.Element("Content").Value.ToString();
contentValue.Replace("amp;", string.Empty);

它成功删除了amp;,但问题是,contentValue此处\位于每个"运算符之前,并在此处添加" contentValue的开头和结尾都是这样的:

"&lt;Rectangle StrokeThickness=\"2\" Tag=\"Default Process Tag\" ToolTip=\"Process\" xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" xmlns:s=\"clr-namespace:System;assembly=mscorlib\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" xmlns:dd=\"clr-namespace:DiagramDesigner;assembly=ADAX_GUI\"&gt;&lt;Rectangle.Style&gt;&lt;Style TargetType=\"Rectangle\"&gt;&lt;Style.BasedOn&gt;&lt;Style TargetType=\"Rectangle\"&gt;&lt;Style.Resources&gt;&lt;ResourceDictionary /&gt;&lt;/Style.Resources&gt;&lt;Setter Property=\"UIElement.RenderTransform\"&gt;&lt;Setter.Value&gt;&lt;SkewTransform AngleX=\"-15\" AngleY=\"0\" CenterX=\"50\" CenterY=\"25\" /&gt;&lt;/Setter.Value&gt;&lt;/Setter&gt;&lt;Setter Property=\"Shape.Fill\"&gt;&lt;Setter.Value&gt;&lt;LinearGradientBrush StartPoint=\"0,0\" EndPoint=\"0,1\"&gt;&lt;LinearGradientBrush.GradientStops&gt;&lt;GradientStop Color=\"#FFFAFBE9\" Offset=\"0\" /&gt;&lt;GradientStop Color=\"#FFFFA500\" Offset=\"1\" /&gt;&lt;/LinearGradientBrush.GradientStops&gt;&lt;/LinearGradientBrush&gt;&lt;/Setter.Value&gt;&lt;/Setter&gt;&lt;Setter Property=\"Shape.Stroke\"&gt;&lt;Setter.Value&gt;&lt;SolidColorBrush&gt;#FFD69436&lt;/SolidColorBrush&gt;&lt;/Setter.Value&gt;&lt;/Setter&gt;&lt;Setter Property=\"Shape.StrokeThickness\"&gt;&lt;Setter.Value&gt;&lt;s:Double&gt;1&lt;/s:Double&gt;&lt;/Setter.Value&gt;&lt;/Setter&gt;&lt;Setter Property=\"Shape.StrokeLineJoin\"&gt;&lt;Setter.Value&gt;&lt;x:Static Member=\"PenLineJoin.Round\" /&gt;&lt;/Setter.Value&gt;&lt;/Setter&gt;&lt;Setter Property=\"Shape.Stretch\"&gt;&lt;Setter.Value&gt;&lt;x:Static Member=\"Stretch.Fill\" /&gt;&lt;/Setter.Value&gt;&lt;/Setter&gt;&lt;Setter Property=\"UIElement.IsHitTestVisible\"&gt;&lt;Setter.Value&gt;&lt;s:Boolean&gt;False&lt;/s:Boolean&gt;&lt;/Setter.Value&gt;&lt;/Setter&gt;&lt;Setter Property=\"UIElement.SnapsToDevicePixels\"&gt;&lt;Setter.Value&gt;&lt;s:Boolean&gt;True&lt;/s:Boolean&gt;&lt;/Setter.Value&gt;&lt;/Setter&gt;&lt;/Style&gt;&lt;/Style.BasedOn&gt;&lt;Style.Resources&gt;&lt;ResourceDictionary /&gt;&lt;/Style.Resources&gt;&lt;/Style&gt;&lt;/Rectangle.Style&gt;&lt;dd:DesignerItem.DragThumbTemplate&gt;&lt;ControlTemplate&gt;&lt;Rectangle Name=\"ProcessShape\" Width=\"250\" Height=\"150\"&gt;&lt;Rectangle.Style&gt;&lt;Style TargetType=\"Rectangle\"&gt;&lt;Style.BasedOn&gt;&lt;Style TargetType=\"Rectangle\"&gt;&lt;Style.BasedOn&gt;&lt;Style TargetType=\"Rectangle\"&gt;&lt;Style.Resources&gt;&lt;ResourceDictionary /&gt;&lt;/Style.Resources&gt;&lt;Setter Property=\"UIElement.RenderTransform\"&gt;&lt;Setter.Value&gt;&lt;SkewTransform AngleX=\"-15\" AngleY=\"0\" CenterX=\"50\" CenterY=\"25\" /&gt;&lt;/Setter.Value&gt;&lt;/Setter&gt;&lt;Setter Property=\"Shape.Fill\"&gt;&lt;Setter.Value&gt;&lt;LinearGradientBrush StartPoint=\"0,0\" EndPoint=\"0,1\"&gt;&lt;LinearGradientBrush.GradientStops&gt;&lt;GradientStop Color=\"#FFFAFBE9\" Offset=\"0\" /&gt;&lt;GradientStop Color=\"#FFFFA500\" Offset=\"1\" /&gt;&lt;/LinearGradientBrush.GradientStops&gt;&lt;/LinearGradientBrush&gt;&lt;/Setter.Value&gt;&lt;/Setter&gt;&lt;Setter Property=\"Shape.Stroke\"&gt;&lt;Setter.Value&gt;&lt;SolidColorBrush&gt;#FFD69436&lt;/SolidColorBrush&gt;&lt;/Setter.Value&gt;&lt;/Setter&gt;&lt;Setter Property=\"Shape.StrokeThickness\"&gt;&lt;Setter.Value&gt;&lt;s:Double&gt;1&lt;/s:Double&gt;&lt;/Setter.Value&gt;&lt;/Setter&gt;&lt;Setter Property=\"Shape.StrokeLineJoin\"&gt;&lt;Setter.Value&gt;&lt;x:Static Member=\"PenLineJoin.Round\" /&gt;&lt;/Setter.Value&gt;&lt;/Setter&gt;&lt;Setter Property=\"Shape.Stretch\"&gt;&lt;Setter.Value&gt;&lt;x:Static Member=\"Stretch.Fill\" /&gt;&lt;/Setter.Value&gt;&lt;/Setter&gt;&lt;Setter Property=\"UIElement.IsHitTestVisible\"&gt;&lt;Setter.Value&gt;&lt;s:Boolean&gt;False&lt;/s:Boolean&gt;&lt;/Setter.Value&gt;&lt;/Setter&gt;&lt;Setter Property=\"UIElement.SnapsToDevicePixels\"&gt;&lt;Setter.Value&gt;&lt;s:Boolean&gt;True&lt;/s:Boolean&gt;&lt;/Setter.Value&gt;&lt;/Setter&gt;&lt;/Style&gt;&lt;/Style.BasedOn&gt;&lt;Style.Resources&gt;&lt;ResourceDictionary /&gt;&lt;/Style.Resources&gt;&lt;/Style&gt;&lt;/Style.BasedOn&gt;&lt;Style.Resources&gt;&lt;ResourceDictionary /&gt;&lt;/Style.Resources&gt;&lt;Setter Property=\"UIElement.IsHitTestVisible\"&gt;&lt;Setter.Value&gt;&lt;s:Boolean&gt;True&lt;/s:Boolean&gt;&lt;/Setter.Value&gt;&lt;/Setter&gt;&lt;/Style&gt;&lt;/Rectangle.Style&gt;&lt;/Rectangle&gt;&lt;/ControlTemplate&gt;&lt;/dd:DesignerItem.DragThumbTemplate&gt;&lt;/Rectangle&gt;"

我尝试替换\

contentValue.Replace("\\", string.Empty);

但它仍然是一样的。我想将此输入字符串传递给另一个函数,在该函数中它应与XML文件Content元素值完全相同,而不是\"。如何在阅读时在\字符串的开头和结尾处将这些"contentValue一起删除?谢谢。

1 个答案:

答案 0 :(得分:1)

你不需要替换它们.Debugger显示反斜杠但它们实际上并不存在。这就是调试器的工作方式。反斜杠用于转义字符串中的双引号。您可以通过在控制台中显示contentValue来验证这一点。