Pregunta

¿Hay alguna diferencia entre

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

y

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

Estoy utilizando la clase SyndicationFeed en .NET para generar un feed Atom, y tengo que añadir algunos elementos para el estándar opensearch, pero sigue añadiendo elementos como éste uno encima cuando lo quiero para añadirlos como el anterior.

El código:

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

Editar

La etiqueta de alimentación de la raíz es similar al siguiente

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

Después de cambiar mi código como se sugiere @Reddog, las miradas totalResults elemento como éste

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

El código que añade el espacio de nombres a las miradas de la etiqueta de alimentación como esto

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

Y el código que añade el elemento totalResults ahora se ve así

feed.ElementExtensions.Add("totalResults", @"http://a9.com/-/spec/opensearch/1.1/", "1000");
¿Fue útil?

Solución

No importa. Me di cuenta que estaba añadiendo el espacio de nombres de forma incorrecta. Debe ser

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

Otros consejos

Los espacios de nombres

espacios de nombres por defecto se heredan del elemento padre. O de lo contrario, se pueden definir nuevos alias para sus hijos para su uso con la sintaxis xmlns:alias= o puede volver a definir el espacio de nombres predeterminado para usar con un elemento (y, por supuesto, de los niños), utilizando la sintaxis xmlns=.

primer ejemplo:

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

Requiere que el alias de espacio de nombres "OpenSearch" ser definidos por un elemento padre - posiblemente en un espacio de nombres diferente. Por ejemplo:

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

A pesar de este elemento medios que "Myroot" se encuentra en un espacio de nombres diferentes -. A saber, el que viene por defecto (con un espacio de nombres en blanco o el definido por su propio padre)

Insertar

Con el fin de agregar realmente el elemento con el espacio de nombres correcta, tendrá que utilizar el espacio de nombres en sí, en lugar de lo que de alias ( "opensearch").

Por lo tanto, para agregar un nuevo elemento que necesita para agarrar bien el espacio de nombres del nodo padre (o de lo contrario solo lo sabe y lo han codificado).

por ejemplo.

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

Sin embargo, nota que se le han limitado o ningún control sobre los alias de particulares dados a su espacio de nombres. Con el fin de hacer esto, usted tiene que tomar un cierto control sobre el proceso de serialización XML ...

Para ser más completa.

Conjunto especificar espacio de nombres de elemento de canal con:

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

y especificar el espacio de nombres totalResults con:

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

Esto le dará:

<opensearch:totalResults>1000</opensearch:totalResults>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top