2011-05-25 106 views
0

我有這樣的XML的LINQ to XML:序列不包含任何元素

<?xml version="1.0" encoding="utf-8"?> 
    <root> 
     <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> 
     <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> 
     <xsd:element name="root" msdata:IsDataSet="true"> 
     <xsd:complexType> 
     <xsd:choice maxOccurs="unbounded"> 
      <xsd:element name="metadata"> 
      <xsd:complexType> 
       <xsd:sequence> 
       <xsd:element name="value" type="xsd:string" minOccurs="0" /> 
       </xsd:sequence> 
       <xsd:attribute name="name" use="required" type="xsd:string" /> 
       <xsd:attribute name="type" type="xsd:string" /> 
       <xsd:attribute name="mimetype" type="xsd:string" /> 
       <xsd:attribute ref="xml:space" /> 
      </xsd:complexType> 
      </xsd:element> 
      <xsd:element name="assembly"> 
      <xsd:complexType> 
       <xsd:attribute name="alias" type="xsd:string" /> 
       <xsd:attribute name="name" type="xsd:string" /> 
      </xsd:complexType> 
      </xsd:element> 
      <xsd:element name="data"> 
      <xsd:complexType> 
       <xsd:sequence> 
       <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> 
       <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> 
       </xsd:sequence> 
       <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> 
       <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> 
       <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> 
       <xsd:attribute ref="xml:space" /> 
      </xsd:complexType> 
      </xsd:element> 
      <xsd:element name="resheader"> 
      <xsd:complexType> 
       <xsd:sequence> 
       <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> 
       </xsd:sequence> 
       <xsd:attribute name="name" type="xsd:string" use="required" /> 
      </xsd:complexType> 
      </xsd:element> 
     </xsd:choice> 
     </xsd:complexType> 
    </xsd:element> 
    </xsd:schema> 
    <resheader name="resmimetype"> 
    <value>text/microsoft-resx</value> 
    </resheader> 
    <resheader name="version"> 
    <value>2.0</value> 
    </resheader> 
    <resheader name="reader"> 
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> 
    </resheader> 
    <resheader name="writer"> 
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> 
    </resheader> 
    <data name="Nieuws" xml:space="preserve"> 
    <value>News</value> 
    </data> 
    <data name="Pagina's" xml:space="preserve"> 
    <value>Pages</value> 
    </data> 
    <data name="searchreasults" xml:space="preserve"> 
    <value>There were no matches found</value> 
    </data> 
</root> 

而且我也有這樣的方法,在這裏我需要兩個文件,並從他們採取一些值,然後我的所有值合併成一個對象在所述第二查詢:

Public Shared Function RetrieveTranslation(ByVal filefrom As String, ByVal fileto As String) As List(Of clsTranslation) 
    Dim valuefrom = (From l In XElement.Load(fileto).Elements("data") Select l.Element("value").Value).FirstOrDefault 

    Dim valuetrans = From vl In XElement.Load(filefrom).Elements("data") Select (New clsTranslation With {.Filename = filefrom, .Value = vl.Element("value").Value, .Valueto = valuefrom.ToString, .TranslationId = vl.Attribute("name").Value}) 
    Return valuetrans.ToList 

End Function 

因此,問題是,當我運行的代碼,有一個「序列不包含任何元素」錯誤在第一個查詢(valuefrom)。我調試過,它說查詢中沒有任何內容,但我不明白爲什麼,因爲我做了類似的事情,從來沒有像這樣的問題。

任何提示?

在此先感謝,

Alf。

P.S:哦!順便說一句,我很想知道是否做得像我一樣做得很好,從兩個查詢中創建一個對象,並將第一個值放入第二個查詢中。謝謝!

+0

那麼你已經發布了一小段標記,甚至不是一個格式良好的XML文檔。我懷疑這個問題與你沒有顯示的部分文檔中聲明的命名空間有關。或者向我們展示這些「數據」元素的祖先元素中的任何名稱空間聲明,或嘗試使用http://msdn.microsoft.com/en-us/library/bb387093.aspx幫助您自己弄清楚它們。 – 2011-05-25 15:01:20

+0

嗯...我會檢查頁面。我也更新了整個XML文檔,儘管我發佈的部分是最重要的 – alfizqu 2011-05-25 15:17:28

+1

我無法重現您的示例XML問題,我將完整的XML示例保存爲「XMLFile1.xml」,然後只執行兩行代碼'Dim valuefrom =(From l In XElement.Load(「.. \ .. \ XMLFile1.xml」)。Elements(「data」)選擇l.Element(「value」)。Value).FirstOrDefault'和'Console .WriteLine(valuefrom)',我不會收到任何錯誤,而是輸出「News」。所以不知何故,你的實際代碼產生的錯誤必須是不同的。 – 2011-05-25 16:00:14

回答

0

已解決!我的問題不是代碼,而是其他XML文件是空的......感謝您的幫助!

相關問題