Question

Y at-il une différence entre

<opensearch:totalResults>1000</opensearch:totalResults>

et

<totalResults xmlns="opensearch">1000</totalResults>

J'utilise la classe SyndicationFeed dans .NET pour générer un flux Atom, et je dois ajouter quelques éléments pour la norme OpenSearch, mais il continue d'ajouter des éléments comme celui-ci un au-dessus quand je veux les ajouter comme ancien.

Le code:

feed.ElementExtensions.Add("totalResults", "opensearch", "2");

EDIT

La balise alimentation racine ressemble à ceci

<feed xml:lang="en-US" p1:opensearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:p1="xmlns" xmlns="http://www.w3.org/2005/Atom">

Après avoir changé mon code comme @Reddog suggéré, l'élément totalResults ressemble à ceci

<totalResults xmlns="http://a9.com/-/spec/opensearch/1.1/">1000</totalResults>

Le code qui ajoute l'espace de noms à l'apparence d'étiquette d'alimentation comme celui-ci

feed.AttributeExtensions.Add(
    new XmlQualifiedName("opensearch", "xmlns"),
    @"http://a9.com/-/spec/opensearch/1.1/");

Et le code qui ajoute l'élément totalResults ressemble maintenant à ceci

feed.ElementExtensions.Add("totalResults", @"http://a9.com/-/spec/opensearch/1.1/", "1000");
Était-ce utile?

La solution

Passons. Je compris que j'ajoutais l'espace de noms mal. Il devrait être

feed.AttributeExtensions.Add(
   new XmlQualifiedName("opensearch", "http://www.w3.org/2000/xmlns/"),
   "http://a9.com/-/spec/opensearch/1.1/");

Autres conseils

Namespaces

espaces de noms par défaut sont héritées de l'élément parent. Ou bien, vous pouvez définir de nouveaux alias pour vos enfants à utiliser avec la syntaxe de xmlns:alias= ou vous pouvez redéfinir l'espace de noms par défaut à utiliser pour un élément (et bien sûr les enfants de it) en utilisant la syntaxe xmlns=.

Vous premier exemple:

<opensearch:totalResults>1000</opensearch:totalResults>

Exige que l'alias d'espace de noms « OpenSearch » être défini par un élément parent - peut-être dans un autre espace de noms. Par exemple:

<myRoot xmlms:opensearch="http://a9.com/-/spec/opensearch/1.1/">
    <opensearch:totalResults>1000</opensearch:totalResults>
</myRoot>

Bien que cela signifie que l'élément « myroot » est dans un espace de noms différent -. À savoir celui par défaut (avec un espace de noms vide ou que défini par son propre parent)

Insérer

Pour ajouter réellement l'élément avec l'espace de noms correct, vous aurez besoin d'utiliser l'espace de nom lui-même, plutôt que de son alias ( « OpenSearch »).

Par conséquent, pour ajouter votre nouvel élément, vous devez soit saisir l'espace de noms du nœud parent (ou bien savez et avez ce code dur).

par exemple.

feed.ElementExtensions.Add("totalResults", "http://a9.com/-/spec/opensearch/1.1/", 1000);

Mais notez que vous aurez limité ou aucun contrôle sur l'alias particulier donné à votre espace de noms. Pour ce faire, vous devrez prendre un certain contrôle sur le processus de sérialisation XML ...

Pour être plus complet.

Définir spécifier espace de noms sur l'élément de canal avec:

feed.AttributeExtensions.Add(
  new XmlQualifiedName("opensearch", XNamespace.Xmlns.ToString()),
 "http://a9.com/-/spec/opensearch/1.1/");

et spécifiez espace de noms totalResults avec:

feed.ElementExtensions.Add("totalResults", "http://a9.com/-/spec/opensearch/1.1/", "1000");

Cela vous donnera:

<opensearch:totalResults>1000</opensearch:totalResults>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top