Xml 没有保存到文件
Xml doesn't save to file
我在 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>
为什么不保存?
您还没有修改文档。您已向文档询问其自身的字符串表示形式,然后将新字符串分配给同一变量 - 但这根本不会更改文档中的 XML。
我强烈建议您使用 LINQ 来 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);
你漏了一行
doc2.OuterXml = str;
你的代码是在OuterXml
里面的str
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 也会给你相同的结果。
我在 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>
为什么不保存?
您还没有修改文档。您已向文档询问其自身的字符串表示形式,然后将新字符串分配给同一变量 - 但这根本不会更改文档中的 XML。
我强烈建议您使用 LINQ 来 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);
你漏了一行
doc2.OuterXml = str;
你的代码是在OuterXml
里面的str
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 也会给你相同的结果。