我有一个XmlTextReader来读取一系列XML文件,以便将一些信息加载到我的程序中。
但是,在某些XML文件中,我有一个图像的文件名,我想加载该图像。
但问题是XML文件没有图像的完整路径。
<Image id="ImageId" File="Image.bmp" />
<!-- full path is not available. Image is behind XML-->
这意味着Image存在于xml文件所在的位置。
由于某种原因,获取XML文件路径的唯一方法是获取XmlTextReader读取当前XML文件的路径。
我做了一些研究,我发现你可以从XmlTextReader中检索XML路径,如下所示:
string path = reader.BaseURI; // this will get the path of reading XML
// reader is XmlTextReader
如何将path
与图片的路径合并?
我尝试过以下方式:
string FullImagePath = Path.Combine(reader.BaseURI, imagePath);
这些是变量的值:
reader.BaseURI
是"file:///D:/.../currentXml.xml"
imagePath
是"Image.bmp"
。FullImagePath
,在分配Path.Combine
的结果后file:///D:/.../currentXml.xml\\Image.bmp
,这不是我所期望的。图片的预期路径为:D:/.../Image.bmp
,与currentXml.xml
位于同一目录中。
那么如何获取图像文件的路径呢?
答案 0 :(得分:1)
Path.Combine(Path.DirectoryName(reader.BaseUri), imagePath)
答案 1 :(得分:1)
您有两个不同的问题需要单独解决。
根据用于使用映像文件的API,可能支持也可能不支持file://
URI路径。因此,您希望按照Convert file path to a file URI?:
string xmlPath = "file://C:/Temp/Foo.xml";
var xmlUri = new Uri(xmlPath); // Throws if the path is not in a valid format.
string xmlLocalPath = xmlUri.LocalPath; // C:\Temp\Foo.xml
然后,您要构建映像文件的路径,该文件与XML文件位于同一目录中。
这样做的一种方法是获取文件所在的目录,请参阅Getting the folder name from a path:
string xmlDirectory = Path.GetDirectoryName(xmlLocalPath); // C:\Temp
然后你可以添加图像的文件名:
string imagePath = Path.Combine(xmlDirectory, "image.png"); // C:\Temp\image.png
或者,在“一行”中:
string imagePath = Path.Combine(Path.GetDirectoryName(new Uri(reader.BaseURI).LocalPath),
ImagePath);
答案 2 :(得分:0)
在您处理解析网址时,我建议您在XmlUrlResolver
中使用System.Xml
:
string localPath = new XmlUrlResolver().ResolveUri(new Uri(baseUri), imageName).LocalPath;