从嵌入式资源中读取XML文件的最佳方式是什么?

问题描述:

Dim xmldoc As New XmlDocument() 
Dim xmlnode As XmlNodeList 
Dim i As Integer 
Dim str As String 

xmldoc.LoadXml("countyByRegion.xml") 

这将引发从嵌入式资源中读取XML文件的最佳方式是什么?

型“System.Xml.XmlException”的异常出现在system.xml.dll的,但在用户代码中没有处理。其他信息:根级别的数据无效。 1号线,位置1

我通常会做这个

Dim fsXML As New FileStream("countyByRegion.xml", FileMode.Open, FileAccess.Read) 

然后用xmldoc.Load(fsXML)

+0

我有嵌入式资源中的xml文件。我正在处理的应用程序是一个扩展,我没有确切的文件路径,我试过上面的代码,它给了我“mscorlib.dll中发生类型'System.IO.FileNotFoundException'的异常,但没有处理用户代码 附加信息:找不到文件'C:\ Program Files(x86)\ TriZetto \ Facets \ System \ Config \ countyByRegion.xml'。“ – Gautam

+0

如果它是一个嵌入式资源,你不应该需要完整的路径(我在这里丢失了一些简单的东西吗?) – Leprechaun

+0

我很抱歉,我对vb真的很陌生,我使用相同的代码,正如你所建议的,正如你所说的嵌入式资源它不应该在其他位置查找文件。我现在正在研究如何从嵌入式资源中读取文件,但直到现在运行很少。 – Gautam

LoadXml不用于加载文件,它是用于加载XML作为一个字符串。所以它期望你做类似LoadXml("<root><bar>hi</bar></root>");显然,文件名不是有效的XML。

您可以使用Load加载文件。您可以像现在使用LoadXml一样使用它,只需指定文件的路径即可。

+0

谢谢,我明白了你的观点。 – Gautam

Dim fileText As String 
    Dim a As Assembly = GetType(ZP957_Form).Assembly 
    Using reader As New StreamReader(a.GetManifestResourceStream("ZP957.countyByRegion.xml")) 
     fileText = reader.ReadToEnd() 
    End Using 

    xmldoc.LoadXml(fileText) 

由于XML嵌入,不得不从大会,我不得不使用GetManifestResourceStream阅读它,然后我们可以做的loadXML因为我们现在有XML格式的文件流。这对我有效。