簡體   English   中英

LINQ XML 從多個where語句中獲取元素的值

[英]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.

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