Xml XDocument.Save(字符串)不可用
我正在使用VS 2012 Express for Windows 8。我想加载一个XML文件,修改其内容,然后将其保存回磁盘 到目前为止,我一直在使用LINQtoXML,并且能够加载文件,更改一些节点信息 我想使用XDocument.save(string)方法将文件保存回磁盘,但intellisense不包括该方法,尽管它在联机文档中有记录 知道为什么吗 谢谢 ---更新--- 这就是我要做的Xml XDocument.Save(字符串)不可用,xml,linq,windows-8,visual-studio-2012,linq-to-xml,Xml,Linq,Windows 8,Visual Studio 2012,Linq To Xml,我正在使用VS 2012 Express for Windows 8。我想加载一个XML文件,修改其内容,然后将其保存回磁盘 到目前为止,我一直在使用LINQtoXML,并且能够加载文件,更改一些节点信息 我想使用XDocument.save(string)方法将文件保存回磁盘,但intellisense不包括该方法,尽管它在联机文档中有记录 知道为什么吗 谢谢 ---更新--- 这就是我要做的 string questionsXMLPath; XDocument xmlDocQuestions
string questionsXMLPath;
XDocument xmlDocQuestions = null;
StorageFile file = null;
public MainPage()
{
this.InitializeComponent();
questionsXMLPath = Path.Combine(Package.Current.InstalledLocation.Path, "Assets/Template.xml");
xmlDocQuestions = XDocument.Load(questionsXMLPath);
}
private async void SomeCodeHereToPopulateControls()
{
// This Code populates the controls on the Window to edit the XML nodes.
}
private async void Button_Click_3(object sender, RoutedEventArgs e)
{
XElement eleQuestion =
(from el in xmlDocQuestions.Descendants("Question")
where (string)el.Element("ID") == txtID.Text
select el).FirstOrDefault();
eleQuestion.Elements("Description").FirstOrDefault().ReplaceWith(txtDescription.Text);
xmlDocQuestions.Save(questionsXMLPath); // ERROR HERE AND CAN'T COMPILE
}
您需要使用。在Windows 8的沙盒和异步世界中,您会发现在处理文件存储方面有两个显著的区别:
顺便说一句,对于学习文件系统(以及Windows应用商店编程特有的其他概念)的更全面、更全面的方法来说,这是一个很好的加速方式。感谢Jim O'Neil的建议,我阅读了MSDN文档,终于明白了我的应用程序文件夹的资产子文件夹是只读的。我使用了用户的AppData目录,下面是我最终实现的等效解决方案,使用流而不是字符串来加载和保存使用LINQ to XML的de XML文档:
private async void cmdSaveQuestion_Click(object sender, RoutedEventArgs e)
{
using (Stream questions = await ApplicationData.Current.LocalFolder.OpenStreamForWriteAsync(@"Template.xml", CreationCollisionOption.OpenIfExists))
{
questions.Position = 0;
xmlDocTemplate = XDocument.Load(questions);
XElement eleQuestion =
(from el in xmlDocTemplate.Descendants("Question")
where (string)el.Element("ID") == txtID.Text
select el).FirstOrDefault();
eleQuestion.Elements("Description").First().Value = txtDescription.Text;
eleQuestion.Elements("Active").First().Value = chkActive.IsChecked.ToString();
questions.Seek(0, SeekOrigin.Begin);
xmlDocTemplate.Save(questions);
questions.SetLength(questions.Position);
}
LoadTemplateFromXmlFile();
}
我还必须管理流中的光标位置。不这样做会根据光标的位置写两次或写入文件中间。< /P>
Jim或任何人,如果代码可以进一步优化,欢迎发表评论。您需要使用Windows 8文件API。我不知道你说的是什么意思。你能举个例子吗?好的,我明白了。如果不允许使用此方法,我将无法访问该文件,对吗?顺便说一下,它与VS 2012 for Windows Desktop配合使用,所以正如您所说的,这完全是一个怪兽。感谢您提供的资源。这个方法不存在(与不被允许相比),所以您无法编译。对于您可以使用的其他存储API读取方法,如果您尝试读取用户未授予显式权限的文件,则在运行时仍可能会出现uauthorized access异常。您是指清单文件的“功能”部分中的权限吗?Package.Current.InstalledLocation是一个常用的工作场所吗?最初,我使用此属性访问与应用程序一起编译的template.xml文件。该文件位于“资源”子文件夹中。并且启用了文档库功能,尽管我不确定这是否相关……应用程序始终可以访问其安装位置,所以这很好,也很常见。除此之外,如果您想将其保存在应用程序安装位置以外的其他位置(不太容易发现),则必须在应用程序中提示用户(通过选择器)。您不能只保存到c:/foo/bar.txt,而不让他们批准对该目录的访问。文档库功能允许您保存在用户的文档文件夹中,无需请求权限;但是,要在提交到应用商店时启用该功能,您需要一个业务开发人员(而不是单个开发人员)帐户。Ok。我遵循了本文()的内容,除文件保存部分外,其他一切都正常工作。根据你最后的评论,你有没有其他选择的线索?