降序为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。

降序为XML属性

LongString元素在http://schemas.microsoft.com/collection/metadata/2009模式中,因此您也需要它:

this.comboBox2.Items.Add(x.Element(fix + "LongString")
                          .Attribute("Value").Value);

基本上,如果元素的祖先中有一个xmlns="..."属性,它将被视为元素的默认名称空间(较深的属性覆盖较浅的属性)。

(请注意,这个默认的不会出现在属性中。)

我已经有一段时间没有使用名称空间处理xml了,但你必须为每个查询添加名称空间吗?即在你的循环中?