Using relative URI as XmlDataProvider's Source

2019-08-10 13:10发布

Is it possible to use a relative URI when setting the Source property on an XmlDataProvider object in .NET? I get the following exception:

IOException:System.IO.IOException: Cannot locate resource 'configuration.xml'.

When I set the Source property using an absolute URI, everything works as expected:

provider.Source = new Uri(@"C:\bin\Configuration.xml", UriKind.Absolute);

However when I try using a relative URI I get the exception:

provider.Source = new Uri(@"Configuration.xml", UriKind.Relative);

My assemblies are all located in the same directory as the configuration file. What's wrong here?

2条回答
家丑人穷心不美
2楼-- · 2019-08-10 13:52

Yes, the following solves both document loading and using relative source path issues. Using a XmlDataProvider, which is defined in xaml, leaving the Source empty (should be possible in code too) :

<Window.Resources>
<XmlDataProvider 
    x:Name="myDP"
    x:Key="MyData"
    Source=""
    XPath="/RootElement/Element"
    IsAsynchronous="False"
    IsInitialLoadEnabled="True"                         
    debug:PresentationTraceSources.TraceLevel="High"  /> </Window.Resources>

The data provider automatically loads the document once the source is set. Here's the code :

    m_DataProvider = this.FindResource("MyData") as XmlDataProvider;
    FileInfo file = new FileInfo("MyXmlFile.xml");

    m_DataProvider.Document = new XmlDocument();
    m_DataProvider.Source = new Uri(file.FullName);
查看更多
何必那么认真
3楼-- · 2019-08-10 13:59

Try this: FileInfo file = new FileInfo("configuration.xml"); provider.Source = new System.Uri(file.FullName);

查看更多
登录 后发表回答