2016-12-18 61 views
0

我重新寫在WPF一個WinForm桌面應用程序,一切都在WinForm的工作得很好,但我正在逐漸在WPF出現InvalidOperationException與XML文本vb.net

,是造成問題的應用程序的一部分拋出的異常正在讀取一個XML文件並在文本框中顯示數據,這是非常基本的東西。

XML:

<?xml version="1.0" encoding="utf-8" standalone="no"?> 
<xml xmlns="http://www.w3.org/2000/svg" 
> 
    <CORE> 
    <HEADER> 
     <name>aaabbbccc</name> 
     <region>Region25</region> 
    </HEADER> 
    </CORE> 
</xml> 

VB.net:

Public Class MainWindow 

     Public filesvg As XDocument 
      Private Sub ReadHeader() 
      filesvg = XDocument.Load(LogFileName) 
      Dim mynode = filesvg...<HEADER>.First() 
      tbName.Text = mynode...<name>.Value 
      tbRegion.Text = mynode...<region>.Value 
      End Sub 

    End Class 

運行這個時候,XML文件是正確加載,但隨後拋出異常努力創建mynode。

正如我所說的 - 所有在WinForms中運行良好,這也是.net 4.6應用程序,完全相同的代碼。我使用XML文本廣泛整個代碼,所以我已經得到這個在WPF再次合作

事情我想已經:

使其更文字:Dim mynode = filesvg.<CORE>.<HEADER>.First()

使用FirstOrDefault:Dim mynode = filesvg.<CORE>.<HEADER>.FirstOrDefault()

我必須錯過一些非常基本的東西。任何幫助都感激不盡。

回答

0

試試這個

Imports System.Xml 
Imports System.Xml.Linq 
Module Module1 

    Const FILENAME As String = "c:\temp\test.xml" 
    Sub Main() 
     Dim doc As XDocument = XDocument.Load(FILENAME) 
     Dim name As String = doc.Descendants().Where(Function(x) x.Name.LocalName = "name").FirstOrDefault() 
     Dim region As String = doc.Descendants().Where(Function(x) x.Name.LocalName = "region").FirstOrDefault() 
    End Sub 

End Module 
+0

是的,這是有效的。非常感謝,至少我沒有被卡住。我希望儘管能夠使用XML文字,但它更加整潔,更容易跟蹤 - 再加上我所有的WinForms代碼已經使用文字。爲什麼XML文字不能用於WPF?我找不到在Stackoverflow或其他論壇/網站的任何參考。 VB.net IS的一大優勢是()能夠使用XML文字 - 在WPF中已經失去了它的優勢嗎?我使用的是Visual Studio 2015,以防萬一 – andromeda2324

0

我剛剛經歷的一切去用細齒梳試圖讓XML文本做他們的工作。我發現問題出在我使用的輸入XML文件上。

由於某種原因,該文件在XML標題中有兩個相同名稱空間的條目。這導致了XML文字的異常,但是jdweng的解決方案更加健壯並且可以處理命名空間的雙重定義。

相關問題