在WPF中解析本地XML文档(在调试中工作,一旦发布就失败)

时间:2008-11-02 04:51:02

标签: c# wpf xml

我正在构建一个WPF应用程序。在该应用程序内部,我使用XmlReader类来解析几个本地XML文件。我编写的代码在调试期间完美地运行,但是一旦我发布应用程序并安装它就失败了。

我在构建操作中将XML文档作为CONTENT,并且我将它们设置为COPY ALWAYS。我可以确认XML文档正在我的构建中部署,并且一旦安装就在应用程序文件夹中。

让我感到困惑的是,我使用相同的XmlReader代码来解析此应用程序中外部网站的RSS源没有问题。它只在本地XML文档上失败。

有人知道为什么我的XmlReader在发布应用程序后无法解析本地XML文档吗?

以下是我的XmlReader代码的小片段:

XmlReaderSettings settings = new XmlReaderSettings();
            settings.IgnoreComments = true;
            settings.IgnoreProcessingInstructions = true;
            settings.IgnoreWhitespace = true;
            try
            {
                settingsReader = XmlReader.Create("Resources/data/TriviaQuestions.xml", settings);

                nodeNum = 0;
                while (settingsReader.Read())
                {
                    switch (settingsReader.NodeType)
                    {
                        case XmlNodeType.Element:
                            if (settingsReader.HasAttributes)
                            {
                                for (int i = 0; i < settingsReader.AttributeCount; i++)
                                {
                                    settingsReader.MoveToAttribute(i);
                                    _feeds[nodeNum] = settingsReader.Value.ToString();
                                }
                                settingsReader.MoveToContent(); // Moves the reader back to the element node.
                            }
                            break;
                        case XmlNodeType.Text:
                            _questions[nodeNum] = settingsReader.Value;
                            nodeNum++;
                            break;

                    }

                }
                settingsReader.Close();
            }
            catch
            {

            }

这是我的XML

<?xml version="1.0" encoding="utf-8" ?>
<Questions>
    <Question feed="http://entertainment.msn.com/rss/topboxoffice/">What movie has the top box office sales in the US right now?</Question>
    <Question feed="http://entertainment.msn.com/rss/topdvdrentals/">What is the top DVD rental in the US this week?</Question>
    <Question feed="http://entertainment.msn.com/rss/topalbums/">Which of the following albums is currently topping the charts?</Question>
</Questions>

3 个答案:

答案 0 :(得分:3)

根据您的发布说明,我假设您使用clickonce来安装应用程序。

Clickonce对xml文件有不同的默认行为 - 它假定它们是数据文件,并将它们放在与其他文件不同的安装位置。

请仔细检查您的xml文件是否确实安装在您认为的位置。

在发布设置中,您可以将每个xml文件的设置从数据文件更改为包含。您的其他文件已经设置为包含。

请注意,发布设置与文件的构建设置无关。

答案 1 :(得分:1)

你能描述一下“但是一旦我发布应用程序并安装它就失败了吗?”

如果您可以描述不起作用的内容,错误是什么以及提供异常信息,那将会很有帮助。


与你的问题无关,每当我在生产代码中看到空的catch块时,我都会惊恐万分!

答案 2 :(得分:0)

考虑使用IsolatedStorage存储您的设置,而不是存储在相对的Resources目录中。这将为您提供不同安装方案的已知位置(例如,ClickOnce安装)。