Question

Je suis en train de faire des opérations très simples sur un fichier .cxml. Comme vous le savez est essentiellement un fichier .xml. Ceci est un exemple de fichier j'ai créé pour tester l'application:

<?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" />
  </FacetCategories>
<!-- Other entries-->
  <Items ImgBase="Actresses_files\go144bwo.0ao.xml" HrefBase="http://www.imdb.com/name/">    
    <Item Id="2" Img="#2" Name="Anna Karina" Href="nm0439344/">
      <Description> She is a nice girl</Description>
      <Facets>
        <Facet Name="Nationality">
          <LongString Value="Danish" />
        </Facet>
      </Facets>
    </Item>    
  </Items>
<!-- Other entries-->
</Collection>

Je ne peux pas obtenir un code simple, qui fonctionne comme:

XDocument document = XDocument.Parse(e.Result);
foreach (XElement x in document.Descendants("Item"))
{
...
}

Le test sur un xml générique fonctionne. Le fichier cxml est correctement chargé dans le document.

Tout en regardant l'expression:

document.Descendants ( "article"), les résultats

la réponse est:

Chaîne vide "Enumération n'a donné aucun résultat"

Toute indication sur ce qui peut être l'erreur? Je suis aussi d'ajouter un coup d'œil pour obtenir descendants de Facet, Facettes, etc., mais il n'y a aucun résultat dans l'énumération. Cela ne signifie évidemment se produit pas avec un fichier xml générique j'ai utilisé pour tester. C'est un problème que j'ai avec .cxml.

Était-ce utile?

La solution

Fondamentalement, votre XML définit un espace de noms par défaut avec l'attribut xmlns="http://schemas.microsoft.com/collection/metadata/2009":

Cela signifie que vous devez qualifier complètement votre requête Descendants par exemple:.

XDocument document = XDocument.Parse(e.Result);
foreach (XElement x in document.Descendants("{http://schemas.microsoft.com/collection/metadata/2009}Item"))
{
...
}

Si vous supprimez l'espace de noms par défaut à partir du XML votre code fonctionne réellement comme-est, mais ce n'est pas le but de l'exercice.

Autres conseils

Voir le projet Metadata.CXML sous http://github.com/Zoomicon/Metadata.CXML sourcecode pour l'analyse syntaxique à base LINQ des fichiers cXML.

Voir aussi projet ClipFlair.Metadata http://github.com/Zoomicon/ClipFlair.Metadata pour une analyse des facettes les personnalisés cXML trop

BTW, http://ClipFlair.codeplex.com peut extraira le projet de ClipFlair.Gallery pour savoir comment auteur ASP.net formulaires Web à des fragments modifier les métadonnées (parties de fichiers cXML) et les fusionner ensemble dans un seul (que vous ensuite convertir périodiquement DeepZoom cXML avec l'outil pAuthor http://pauthor.codeplex.com ).

Si quelqu'un est intéressé à faire de nidification (hiérarchie) des collections CXML voir http://github.com/Zoomicon/Trafilm.Metadata et http://github.com/Zoomicon/Trafilm.Gallery

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top