降序为XML属性
本文关键字:属性 XML 降序 | 更新日期: 2023-09-27 18:29:47
我可能对此很生气,这里面一定有一些小错误。我试图从这个XML代码中获得每个属性Name==Eyes的"Value"属性。
<?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);
}
如果我在上修复了一个手表,那么在调用该方法之前,对象是空的
x.Element("LongString")。Attribute("Value")。Value;
我知道这可能是我在遍历XML时缺少的东西,但我不知道为什么它会变成null,因为如果我在(x.Value)上尝试一个愚蠢的监视,那么它就不是null。
LongString
元素在http://schemas.microsoft.com/collection/metadata/2009
模式中,因此您也需要它:
this.comboBox2.Items.Add(x.Element(fix + "LongString")
.Attribute("Value").Value);
基本上,如果元素的祖先中有一个xmlns="..."
属性,它将被视为元素的默认名称空间(较深的属性覆盖较浅的属性)。
(请注意,这个默认的不会出现在属性中。)
我已经有一段时间没有使用名称空间处理xml了,但你必须为每个查询添加名称空间吗?即在你的循环中?