簡體   English   中英

如何從Linq獲取xml的價值

[英]how to get value from xml by Linq

我正在使用以下代碼讀取5GB大小的xml文件,並且我成功獲得第一個元素Testid但未能獲得另一個元素TestMin來自不同的命名空間這是我正在使用的xml

 which i am getting as null

這有什么不對?

編輯 GMileys回答給出錯誤,如The ':' character, hexadecimal value 0x3A, cannot be included in a name

元素es:qRxLevMinxn:attributes的子元素,但看起來你試圖選擇它作為xn:vsDataContainer的子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是一種更好的方法。

這種方法怎么樣?

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
}

嘗試這個與您的代碼非常相似但更簡單的代碼。

            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);
                     }
                }
            }

實際上命名空間是罪魁禍首,我所做的是首先加載我得到的小部分。重新創建方法到xdocument,然后我刪除了所有的命名空間,然后我拿了值.simple :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM