• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

C#linq to xml,具有属性的嵌套查询

c/c++ 来源:Pete 4次浏览

我真的很努力想要让我的头转过来。C#linq to xml,具有属性的嵌套查询

我正在使用c#。

我想从一个XML文件中找回IEnumerable的产品。

下面是XML结构的样品。

我需要的是具有设置为如真productEnriched自定义属性的产品列表。

有些产品不会有根本

我头上的任何自定义属性部分已经strated伤想到它!

<?xml version="1.0" encoding="UTF-8"?> 
<catalog xmlns="http://www.mynamespace.com" catalog-id="MvgCatalog"> 
    <product> 
     <custom-attributes> 
      <custom-attribute attribute-id="productEnriched">true</custom-attribute> 
     </custom-attributes> 
    </product> 
</category> 

感谢您的帮助

要澄清一些事情我已经增加了一些更多的项目到示例XML

我需要的产品 只是有一个定做的产品列表属性元素用在XML productEnriched属性和真实 一些产品的价值不会有任何自定义属性或自定义属性的元素 一些产品会有,但与假 值我只是需要的地方存在的产品列表一个第二有真正

<?xml version="1.0" encoding="UTF-8"?> 
<catalog xmlns="http://www.mynamespace.com" catalog-id="MvgCatalog"> 
    <product> 
     <upc>000000000000</upc> 
     <productTitle>My product name</productTitle> 
     <custom-attributes> 
      <custom-attribute attribute-id="productEnriched">true</custom-attribute> 
      <custom-attribute attribute-id="somethingElse">4</custom-attribute> 
      <custom-attribute attribute-id="anotherThing">otherdata</custom-attribute> 
     </custom-attributes> 
    </product> 
</category> 


===========解决方案如下:

我需要的产品清单只显示有与在XML productEnriched属性和真实一些产品价值 一个 定制属性元素的产品不会有任何的值自定义属性或 定制属性的元素有些产品会有,但有值的假 我只是需要的地方存在的产品清单,并具有真正

var xml = XElement.Load(@"your file.xml"); 
XNamespace ns = "http://www.mynamespace.com"; 
var products = xml.Elements(ns + "product"); 
var filtered = products.Where(
    product => 
     product.Element(ns + "custom-attributes") != null && 
     product.Element(ns + "custom-attributes").Elements(ns + "custom-attribute") 
     .Any(
      ca => 
       ca.Value == "true" && 
       ca.Attribute("attribute-id") != null && 
       ca.Attribute("attribute-id").Value == "productEnriched")); 

一个 值

顺便说一句,你个XML是无效的 – 你的开始标记(catalog)不符合您的结束标记(category)。

本身的格式是奇怪 – 它是你的主意吗?

<custom-attributes> 
     <custom-attribute attribute-id="productEnriched">true</custom-attribute> 
     <custom-attribute attribute-id="somethingElse">4</custom-attribute> 
     <custom-attribute attribute-id="anotherThing">otherdata</custom-attribute> 
    </custom-attributes> 

为什么把属性名称作为属性值和属性值作为元素的值?它看起来很臃肿,并且没有明确的目的“重新创建”XML。

为什么不:

<custom-attributes> 
     <custom-attribute productEnriched="true"/> 
     <custom-attribute somethingElse="4"/> 
     <custom-attribute anotherThing="otherdata"/> 
    </custom-attributes> 

或者:

<custom-attributes productEnriched="true" somethingElse="4" anotherThing="otherdata"/> 

或者仅仅是使用元素:

<product-parameters> 
     <productEnriched>true</productEnriched> 
     <somethingElse>4</somethingElse> 
     <anotherThing>otherdata</anotherThing> 
    </product-parameters> 

版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)