C# 降序到XML属性
我可能对此很生气,这里面肯定有一些小错误。我试图从这段XML代码中获取每个属性名==眼睛的“值”属性C# 降序到XML属性,c#,xml,silverlight,xpath,linq-to-xml,C#,Xml,Silverlight,Xpath,Linq To Xml,我可能对此很生气,这里面肯定有一些小错误。我试图从这段XML代码中获取每个属性名==眼睛的“值”属性 <?xml version="1.0" encoding="utf-8"?> <Collection xmlns:p="http://schemas.microsoft.com/livelabs/pivot/collection/2009" SchemaVersion="1.0" Name="Actresses" xmlns="http://schemas.mi
<?xml version="1.0" encoding="utf-8"?>
<Collection xmlns:p="http://schemas.microsoft.com/livelabs/pivot/collection/2009" SchemaVersion="1.0" Name="Actresses" xmlns="http://schemas.microsoft.com/collection/metadata/2009">
<FacetCategories>
<FacetCategory Name="Nationality" Type="LongString" p:IsFilterVisible="true" p:IsWordWheelVisible="true" p:IsMetaDataVisible="true" />
<FacetCategory Name="Eyes" Type="LongString" p:IsFilterVisible="true" p:IsWordWheelVisible="true" p:IsMetaDataVisible="true" />
</FacetCategories>
<Items ImgBase="Actresses_files\go144bwo.0ao.xml" HrefBase="http://www.imdb.com/name/">
<Item Id="0" Img="#0" Name="Virginie Ledoyen" Href="nm0001461/">
<Description> blablabla blablabla blablabla blablabla blablabla blablabla blablabla blablabla blablabla blablabla blablabla blablabla blablabla blablabla blablabla blablabla </Description>
<Facets>
<Facet Name="Nationality">
<LongString Value="French" />
</Facet>
<Facet Name="Eyes">
<LongString Value="Blue" />
</Facet>
</Facets>
</Item>
<Item Id="1" Img="#1" Name="Meiko Kaji" Href="nm0435299/">
<Description> blablabla blablabla blablabla blablabla blablabla blablabla blablabla blablabla blablabla blablabla blablabla blablabla blablabla blablabla blablabla blablabla </Description>
<Facets>
<Facet Name="Nationality">
<LongString Value="Japanese" />
</Facet>
<Facet Name="Eyes">
<LongString Value="Black" />
</Facet>
</Facets>
</Item>
</Items>
</Collection>
布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉
布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉
我需要用这些属性填充一个组合框。我的代码类似于:
XNamespace fix = "http://schemas.microsoft.com/collection/metadata/2009";
IEnumerable<XElement> list2 =
from item in document.Descendants(fix + "Facet")
where (string)item.Attribute("Name") == "Eyes"
select item;
foreach (XElement x in list2)
{
this.comboBox2.Items.Add(x.Element("LongString").Attribute("Value").Value);
}
XNamespace-fix=”http://schemas.microsoft.com/collection/metadata/2009";
IEnumerable列表2=
来自document.substands中的项(fix+“Facet”)
其中(字符串)item.Attribute(“Name”)=“眼睛”
选择项目;
foreach(列表2中的元素x)
{
this.comboBox2.Items.Add(x.Element(“LongString”).Attribute(“Value”).Value);
}
如果我将手表固定在以下位置,则在调用该方法之前,该对象为null:
x、 元素(“长字符串”)。属性(“值”)。值
我知道这可能是我在遍历XML时缺少的东西,但我不知道为什么它会变成空值,因为如果我尝试在(x.Value)上使用哑表,那么它就不是空值。我已经有一段时间没有用名称空间处理XML的乐趣了,但是您必须在每个查询中添加名称空间吗?i、 e.在循环中?长串
元素在http://schemas.microsoft.com/collection/metadata/2009
schema,因此您也需要:
this.comboBox2.Items.Add(x.Element(fix + "LongString")
.Attribute("Value").Value);
基本上,如果元素的祖先中有一个xmlns=“…”
属性,那么它将作为元素的默认名称空间(较深的名称空间覆盖较浅的名称空间)
(请注意,此默认设置不会与属性一起出现。)非常感谢。不知道为什么我会想当然地认为我可以避免在循环中再次使用名称空间。@sparaflAsh:您可能希望在一个位置提取元素名称(如XName
值),这样您就不需要在代码中看到所有的名称空间。