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

我真的很努力想要让我的头转过来。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>

以上是 C#linq to xml,具有属性的嵌套查询 的全部内容, 来源链接: utcz.com/qa/259606.html

回到顶部