[英]LINQ XML Get value of element from multiple where statement
關於SO的第一個問題,如果我搞砸了,請道歉。 我是 c# 和 LINQ 的新手,過去兩天一直在尋找解決方案,但似乎沒有一個正是我所追求的。 所以...
我正在查詢的 xml 文件是從 DICOM 結構化報告文件生成的。 我正在嘗試從此 xml 文件中獲取元素的特定值。 這些元素對應於在超聲檢查期間進行的特定測量。 整個 xml 文件長 15k 行,因此為簡單起見,我對其進行了編輯。 我將僅展示我正在嘗試做的一個示例,但對於我想要獲得的所有其他元素,該過程將是相同的。
我想要獲得的元素必須滿足 3 個標准,在這種情況下是三尖瓣、峰值速度和反流,但這取決於所進行的測量。 一旦滿足這些標准,我想獲得的值,在本例中為 2120。
xml
<report type="Comprehensive SR">
<document>
<content>
<container flag="SEPARATE">
<container flag="SEPARATE">
<code>
<meaning>Tricuspid Valve</meaning>
</code>
<container flag="SEPARATE">
<num>
<concept>
<meaning>Peak Velocity</meaning>
</concept>
<code>
<meaning>Regurgitant Flow</meaning>
</code>
<value>2120</value>
<unit>
<value>mm/s</value>
</unit>
</num>
我在 c# 中的代碼
XDocument xmlSR = XDocument.Load("DICOMSRtest.xml");
var TRVmax = from c in xmlSR.Descendants("container")
where (string)c.Element("code").Element("meaning") == "Tricuspid Valve"
where (string)c.Element("concept").Element("meaning") == "Peak Velocity"
where (string)c.Element("code").Element("meaning") == "Regurgitant Flow"
select c.Element("container").Element("num").Element("value");
Console.Write("TRVmax: " + TRVmax);
當我運行代碼時,我得到以下信息
TRVmax: System.Linq.Enumerable+WhereSelectEnumerableIterator`2[System.Xml.Linq.XElement,System.Xml.Linq.XElement]
任何我可以閱讀以解決此問題的文檔的幫助或指導將不勝感激。
嘗試以下操作:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
XDocument doc = XDocument.Load("PurchaseOrder.xml");
List<XElement> xContainers = doc.Descendants("container").Where(x => x.Element("num") != null).ToList();
List<Container> containers = new List<Container>();
foreach (XElement xContainer in xContainers)
{
Container newContainer = new Container();
containers.Add(newContainer);
newContainer.code = (string)xContainer.Descendants("code").FirstOrDefault();
newContainer.concept = (string)xContainer.Descendants("concept").FirstOrDefault();
newContainer.value = (int)xContainer.Descendants("value").FirstOrDefault();
newContainer.unit = (string)xContainer.Descendants("unit").FirstOrDefault();
}
}
}
public class Container
{
public string code { get; set; }
public string concept { get; set; }
public int value { get; set; }
public string unit { get; set; }
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.