Domanda

C'è qualche differenza tra

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

e

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

Sto utilizzando la classe SyndicationFeed in .NET per generare un feed Atom, e ho bisogno di aggiungere alcuni elementi per lo standard OpenSearch, ma mantiene l'aggiunta di elementi come il secondo quello sopra quando lo voglio aggiungerli come la precedente.

Il codice:

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

Modifica

L'alimentazione principale aspetto dei tag come questo

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

Dopo aver cambiato il mio codice come suggerito @Reddog, gli sguardi totalResults elemento come questo

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

Il codice che aggiunge lo spazio dei nomi agli sguardi dei tag di alimentazione come questo

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

E il codice che aggiunge l'elemento totalResults ora assomiglia a questo

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

Soluzione

Nevermind. Mi resi conto che stavo aggiungendo lo spazio dei nomi in modo non corretto. Dovrebbe essere

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

Altri suggerimenti

namespace

spazi dei nomi predefiniti sono ereditate dall'elemento genitore. Oppure, è possibile definire nuovi alias per i vostri bambini per l'utilizzo con la sintassi xmlns:alias= oppure si può ridefinire lo spazio dei nomi predefinito da utilizzare per un elemento (e, naturalmente, di bambini) utilizzando la sintassi xmlns=.

primo esempio:

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

Richiede che gli alias namespace "OpenSearch" essere definiti da un elemento padre - forse in uno spazio dei nomi diverso. Ad esempio:

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

Anche se questo elemento significa che "myRoot" è in uno spazio diverso -. Vale a dire, quella di default (con uno spazio dei nomi vuoto o che definito da un proprio genitore)

Inserimento

Al fine di effettivamente aggiungere l'elemento con lo spazio dei nomi corretto, avrete bisogno di utilizzare lo spazio dei nomi in sé, piuttosto che di essa l'alias ( "OpenSearch").

Quindi, aggiungere la nuovo elemento è necessario né afferrare lo spazio dei nomi del nodo padre (o altro solo lo sai e lo hanno codificato duro).

per es.

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

Ma nota che ti hanno limitato o nessun controllo sui particolari alias dato allo spazio dei nomi. Per fare questo, dovrete prendere un certo controllo sul processo di serializzazione XML ...

Per essere più completo.

Set specificare namespace sull'elemento canali con:

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

E specificare namespace totalResults con:

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

che vi darà:

<opensearch:totalResults>1000</opensearch:totalResults>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top