Xml没有保存到文件

时间:2015-12-07 08:26:36

标签: c# android xml xamarin xamarin.android

我在Xamarin中编写Android应用程序

我有写入文件的xml(已实现)

在不同的Activity上我尝试打开这个文件,替换一些字符串并保存

像这样打开文件

var doc2 = new XmlDocument();
        var documentsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
        var filePath = System.IO.Path.Combine(documentsPath, "myFile.xml");
        doc2.Load (filePath);

替换这样的字符串:

string str;
            str = doc2.OuterXml;

                str = str.Replace ("{ProductCode}", Code1);

            Console.WriteLine ("look");
            Console.WriteLine (str);

            doc2.Save (filePath);
            Console.WriteLine (doc2.OuterXml);

当我显示str时,我看到" ProductCode"改变。

但是,当我显示" doc2.OuterXML"我发现它并没有保存。

这是" str":

  <Order CallConfirm="1" PayMethod="Безнал" QtyPerson="" Type="2" PayStateID="0" Remark="{Comment}" RemarkMoney="0" TimePlan="" Brand="1" DiscountPercent="0" BonusAmount="0" Department=""><Customer Login="" FIO="{FIO}" /><Address CityName="{CityName}" StationName="" StreetName="{StreetName}" House="{HouseName}" Corpus="" Building="" Flat="{FlatName}" Porch="" Floor="" DoorCode="" /><Phone Code="{Code}" Number="{Phone}" /><Products><Product Code="398" Qty="{QTY}" /><Product Code="{ProductCode1}" Qty="{QTY1}" /><Product Code="{ProductCode2}" Qty="{QTY2}" /></Products></Order>

这是doc2.Save (filePath);之后的doc2:

<Order CallConfirm="1" PayMethod="Безнал" QtyPerson="" Type="2" PayStateID="0" Remark="{Comment}" RemarkMoney="0" TimePlan="" Brand="1" DiscountPercent="0" BonusAmount="0" Department=""><Customer Login="" FIO="{FIO}" /><Address CityName="{CityName}" StationName="" StreetName="{StreetName}" House="{HouseName}" Corpus="" Building="" Flat="{FlatName}" Porch="" Floor="" DoorCode="" /><Phone Code="{Code}" Number="{Phone}" /><Products><Product Code="{ProductCode}" Qty="{QTY}" /><Product Code="{ProductCode1}" Qty="{QTY1}" /><Product Code="{ProductCode2}" Qty="{QTY2}" /></Products></Order>

为什么它不能保存?

2 个答案:

答案 0 :(得分:5)

您尚未修改文档。您已经向文档询问了自身的字符串表示形式,然后为同一个变量分配了一个新字符串 - 但这根本不会改变文档中的XML。

我强烈建议你使用LINQ to XML(这是一个更好的XML API),你可以拥有:

XDocument doc = XDocument.Load(filePath);
var query = doc.Descendants("Product")
               .Where(p => (string) p.Attribute("Code") == "{ProductCode}");
foreach (var element in query)
{
    element.SetAttributeValue("Code", Code1);
}
doc.Save(filePath);

答案 1 :(得分:0)

你错过了一条线

doc2.OuterXml = str;

您的代码是OuterXmlstr

内的代码
string str;
str = doc2.OuterXml;
str = str.Replace ("{ProductCode}", Code1);

然后你替换了str值而不是doc2值,所以它没有改变。所以现在你需要添加

string str;
str = doc2.OuterXml;
str = str.Replace ("{ProductCode}", Code1);

doc2.OuterXml = str;

现在你会看到doc2.OuterXml也会给你相同的结果。