2016-04-24 18 views
3

次のコードを使用して5GBサイズの巨大なxmlファイルを読み込んでいましたが、最初の要素を取得すると成功しましたTestid他の要素を取得できませんでした これはxml私は持っているLinqによってxmlから値を取得する方法

which i am getting as null 

ここで何が間違っていますか?

EDITは GMileysは、このアプローチについてThe ':' character, hexadecimal value 0x3A, cannot be included in a name

答えて

0

が実際に名前空間が犯人だった、私が最初に私はxdocumentにしてfrom.Readform方法を取得しています小さなセクションをロードされている何をしたか、そして、私はすべての名前空間を削除し、それから私は、値.simpleを取った:)

1

どのようなエラーを与えて答えますか?

XDocument doc = XDocument.Load(path); 

XName utranCellName = XName.Get("UtranCell", "un"); 
XName qRxLevMinName = XName.Get("qRxLevMin", "es"); 

var cells = doc.Descendants(utranCellName); 

foreach (var cell in cells) 
{ 
    string qRxLevMin = cell.Descendants(qRxLevMinName).FirstOrDefault(); 

    // Do something with the value 
} 
+0

5GBファイルの場合、例外が発生しました – peter

3

要素es:qRxLevMinxn:attributesの子要素ですが、xn:vsDataContainerの子としてそれを選択しようとしているように見え、それはその要素の孫です。あなたは次のことを変更してみてください。これに

var dataqrxlevmin = from atts in pin.ElementsAfterSelf(xn + "VsDataContainer") 
     select new 
     { 
      qrxlevmin = (string)atts.Element(es + "qRxLevMin"), 
     }; 

var dataqrxlevmin = from atts in pin.Elements(string.Format("{0}VsDataContainer/{1}attributes", xn, es)) 
     select new 
     { 
      qrxlevmin = (string)atts.Element(es + "qRxLevMin"), 
     }; 

注:私は、読みやすさのためにstring.Formatを使用するように文字列連結を変更し、いずれかを使用することは技術的に細かいですが、string.Formatが良いですアプローチ。

+0

試してみましょう – peter

+0

例外:The characters 16進値のように、名前に含めることはできません – peter

+0

どこに例外がありますか?あなたの変数に書きかけたり、時計を追加したりしてみてください。ローカル変数をインラインではなく、使用するように設定します: 'string.Path = string.Format(" {0}:VsDataContainer/{1}:属性 "、xn、es);' Console.WriteLine(elementPath) ;と 'var dataqrxlevmin = pin.Elements(elementPath)のattsから... 'です。正しいXPathを使用していることを確認するために、各パス文字列でそれを行います。 – gmiley

1

あなたのコードに非常に似ていますが、よりシンプルなこのコードを試してください。

  using (XmlReader xr = XmlReader.Create(path)) 
      { 
       xr.MoveToContent(); 
       XNamespace un = xr.LookupNamespace("un"); 
       XNamespace xn = xr.LookupNamespace("xn"); 
       XNamespace es = xr.LookupNamespace("es"); 
       while (!xr.EOF) 
       { 
        if(xr.LocalName != "UtranCell") 
        { 
         xr.ReadToFollowing("UtranCell", un.NamespaceName); 
        } 
        if(!xr.EOF) 
        { 
         XElement utranCell = (XElement)XElement.ReadFrom(xr); 
        } 
       } 
      } 
関連する問題