Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml XDocument.Save(字符串)不可用_Xml_Linq_Windows 8_Visual Studio 2012_Linq To Xml - Fatal编程技术网

Xml XDocument.Save(字符串)不可用

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

我正在使用VS 2012 Express for Windows 8。我想加载一个XML文件,修改其内容,然后将其保存回磁盘

到目前为止,我一直在使用LINQtoXML,并且能够加载文件,更改一些节点信息

我想使用XDocument.save(string)方法将文件保存回磁盘,但intellisense不包括该方法,尽管它在联机文档中有记录

知道为什么吗

谢谢

---更新---

这就是我要做的

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的沙盒和异步世界中,您会发现在处理文件存储方面有两个显著的区别:

  • 应用程序只能从该应用程序的“本地存储”以编程方式访问数据,除非最终用户授予应用程序存储/读取文件系统中其他位置数据的特定权限(通过)

  • 读取和写入文件是一个异步操作,因此您会发现大多数文件访问方法以“Async”结尾,并且(通常)会使用来利用它们

  • 请查看Windows开发中心上的,以了解更多详细信息以及

    在您的特定情况下,您只需使用本文中所示的技术和上面引用的代码示例编写到所需的输出文件


    顺便说一句,对于学习文件系统(以及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。我遵循了本文()的内容,除文件保存部分外,其他一切都正常工作。根据你最后的评论,你有没有其他选择的线索?