子节点的Linq到Xml查询

本文关键字:Xml 查询 Linq 子节点 | 更新日期: 2023-09-27 18:10:37

<InventoryList>
 <Product xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Id>1</Id>
  <Name>Pizza Ristorante Hawaii</Name>
  <Price>2.99</Price>
  <VariableWeightPrice>€ 8,42 / kg</VariableWeightPrice>
  <Brand>Dr.Oetker</Brand>
  <PackageInfo>355 GR</PackageInfo>
  <categoryString />
  <PictureSmallFilename>1small.jpg</PictureSmallFilename>
  <InformationTakenFrom>Jumbo</InformationTakenFrom>
  <MarketItemUrl></MarketItemUrl>
  <BarCode>4001724819608</BarCode>
  <IsBlackListed>false</IsBlackListed>
  <ItemLists>
    <Item>
        <ListName>in</ListName>
        <Quantity>1</Quantity>
        <QuantityWeight>0</QuantityWeight>
    </Item>
    <Item>
        <ListName>out</ListName>
        <Quantity>2</Quantity>
        <QuantityWeight>0</QuantityWeight>
    </Item>
  </ItemLists>
 </Product>
 <Product xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Id>2</Id>
  <Name>Produto 2</Name>
  <Price>2.99</Price>
  <VariableWeightPrice>€ 5,55 / kg</VariableWeightPrice>
  <Brand>Dr.Oetker</Brand>
  <PackageInfo>355 GR</PackageInfo>
  <categoryString />
  <PictureSmallFilename>1small.jpg</PictureSmallFilename>
  <InformationTakenFrom>Jumbo</InformationTakenFrom>
  <MarketItemUrl></MarketItemUrl>
  <BarCode>4001724819608</BarCode>
  <IsBlackListed>false</IsBlackListed>
  <ItemLists>
    <Item>
        <ListName>out</ListName>
        <Quantity>1</Quantity>
        <QuantityWeight>0</QuantityWeight>
    </Item>
  </ItemLists>
</Product>
</InventoryList>

提前感谢您的帮助。我有这个xml数据库

我想返回所有具有ListName = "out"的产品,但是这个查询我正在尝试它只返回第二个产品,我需要它返回第一个和第二个产品。

 var _queryItems = from c in xml.Descendants("Product")
                          where
                              c.Element("ItemLists").Element("Item").Element("ListName").Value == "out"
                          select c;

谢谢:)

子节点的Linq到Xml查询

现在您只需检查第一个Item元素,而不是检查任何项目的ListName是否匹配"out":

var _queryItems = from c in xml.Descendants("Product") 
                  where c.Element("ItemLists")
                         .Elements("Item").Any( x=> x.Element("ListName").Value == "out") 
                  select c;