C# XML linq query

本文关键字:query linq XML | 更新日期: 2023-09-27 18:20:29

嗨,我有以下XML:

<EPICORTLOG>
    <POS>
        <ClientId>WkStn.90.1</ClientId> 
        <Id>POS.90.20140819.251.8279</Id> 
        <StartTime>2014-08-25T05:12:34</StartTime> 
        <Store>90</Store> 
        <SysDate>2014-08-19T00:00:00</SysDate> 
        <TillNo>1</TillNo> 
        <Time>2014-08-25T05:12:34</Time> 
        <Tran>1093</Tran> 
        <WkStn>1</WkStn> 
        <WORKSTATION>
            <IsAutoLock>1</IsAutoLock> 
        </WORKSTATION>
        <TRADE>     
            <ITEM>
                <Class>102499</Class>  
                <Desc>NIKE RACER</Desc>   
                <FinalPrice>82.77</FinalPrice>   
                <Status>ACTV</Status> 
                <Style>EV0615</Style> 
                <Tag>1</Tag> 
            </ITEM>
        </TRADE>
    </POS>
</EPICORTLOG> 

在实际的XML中有许多类似上面的POS节点。我正在尝试获取ID为POS.90.20140819.251.8279的POS节点,然后从该特定节点获取Item的详细信息。我写了以下查询:

XDocument xdoc = XDocument.Load(XMLFile);    
var item = from items in xdoc.Element("EPICORTLOG").Descendants("POS")
           where items.Attribute("Id").Value == strSelectedPOSID
           select new
           {
               desc=items.Element("ITEM").Attribute("Desc")
           };

但对我来说没有任何结果。这里strSelectedPOSID=POS.90.20140819.251.8279。请告诉我哪里出了问题。

C# XML linq query

IdDesc而不是Attributes。它们是Elements,所以你应该使用

var item = from items in xdoc.Descendants("POS")
           where (string)items.Element("Id") == strSelectedPOSID     
           select new
                  {
                      desc = (string)items.Element("ITEM").Element("Desc")
                  };

我终于得到了值!!以下是我使用的:

 var item = from items in xdoc.Element("EPICORTLOG").Descendants("POS")
                   where (string)items.Element("Id") == strSelectedPOSID
                   select new
                   {
                       desc =   items.Element("TRADE").Element("ITEM").Element("Desc").Value.ToString()
                   };

感谢您的投入。