[英]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:qRxLevMin
是xn: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.