String.Replace不替换

时间:2018-03-22 14:04:56

标签: c#

我正在xml文件中清理一些文件,并尝试使用string.Replace替换某些文本块,但它似乎没有替换我正在搜索的文本。

我的清理代码如下

desired_caps['noReset'] = 'true'

我应该能够回复原始数据'变量,但我将变量分开,以便能够比较替换之前和之后的字符串。我的xml文件包含以下值(逐字复制)

private Stream PrepareFile(string path)
{
    string data = File.ReadAllText(path);

    var newData = data.Replace("<a:FMax xmlns:b=\"http://www.w3.org/2001/XMLSchema\" i:type=\"b:string\"/>", "<a:FMax>0</a:FMax>")
        .Replace("<a:KVy xmlns:b=\"http://www.w3.org/2001/XMLSchema\" i:type=\"b:string\"/>", "<a:KVy>0</a:KVy>")
        .Replace("<a:Td xmlns:b=\"http://www.w3.org/2001/XMLSchema\" i:type=\"b:string\"/>", "<a:Td>0</a:Td>")
        .Replace("<a:VyLim xmlns:b=\"http://www.w3.org/2001/XMLSchema\" i:type=\"b:string\"/>", "<a:VyLim>0</a:VyLim>");

    var newData2 = newData.Replace("<a:VxTableSxI3_2I xmlns:b=\"http://www.w3.org/2001/XMLSchema\" i:type=\"b:string\"/>", "<a:VxTableSxI3_2I>0</a:VxTableSxI3_2I>");

    byte[] bytes = Encoding.ASCII.GetBytes(newData2);
    return new MemoryStream(bytes);
}

前后字符串看起来相同。我确定我错过了一些愚蠢的东西,但我无法看到它是什么。大多数类似问题的答案都指出原始代码没有使用返回值,但在这种情况下我肯定使用了返回值。

1 个答案:

答案 0 :(得分:0)

正如所建议的那样,我发布了最终解决此问题的代码。

private Stream PrepareFile(string path)
{
    string data = File.ReadAllText(path);

    var xml = XDocument.Parse(data);

    XNamespace ns = "http://schemas.datacontract.org/2004/07/HmsSim.EntityModule.Entities.SimulationEntities.Track";
    var longTracker = from item in xml.Descendants(ns + "LongitudinalTracker") select item;

    foreach (var xElement in longTracker.Elements())
    {
        XNamespace nsI = "http://www.w3.org/2001/XMLSchema-instance";
        if (xElement.Attribute(nsI + "type") != null)
        {
            xElement.Attribute(nsI + "type").Remove();
            XAttribute attribute = new XAttribute(nsI + "nil", "true");
            xElement.Add(attribute);
        }
    }

    var latTracker = from item in xml.Descendants(ns + "LateralTracker") select item;

    foreach (var xElement in latTracker.Elements())
    {
        XNamespace nsI = "http://www.w3.org/2001/XMLSchema-instance";
        if (xElement.Attribute(nsI + "type") != null)
        {
            xElement.Attribute(nsI + "type").Remove();
            XAttribute attribute = new XAttribute(nsI + "nil", "true");
            xElement.Add(attribute);
        }
    }

    Stream stream = new MemoryStream();
    xml.Save(stream);
    // Rewind the stream ready to read from it elsewhere
    stream.Position = 0;

    return stream;
}

此代码可以工作,并且比原始代码更不易碎。一如既往,欢迎提出建议。感谢所有评论并引导我走向这个答案的人,我很感激。