Compartir a través de


Procedimiento para: Controlar prefijos de espacio de nombres (LINQ to XML)

En este artículo se describe cómo controlar los prefijos de espacio de nombres al serializar un árbol XML en C# y Visual Basic.

En muchas situaciones, no es necesario controlar los prefijos de espacios de nombres. Sin embargo, algunas herramientas de programación XML lo requieren. Por ejemplo, es posible que esté manipulando una hoja de estilos XSLT o un documento XAML que contenga expresiones XPath insertadas que hagan referencia a prefijos de espacios de nombres concretos. En ese caso, es importante serializar el documento con esos prefijos. Esta es una razón habitual para controlar los prefijos de espacio de nombres.

Otro motivo habitual es que desea que los usuarios editen el documento XML manualmente y creen prefijos de fácil escritura. Por ejemplo, tal vez esté generando un documento XSD. Las convenciones de los esquemas sugieren el uso de xs o xsd como prefijo para el espacio de nombres de esquema.

Para controlar los prefijos de espacios de nombre, inserta atributos que declaran dichos espacios de nombres. Si declara los espacios de nombres con prefijos específicos, LINQ to XML intentará respetar los prefijos durante la serialización.

Para crear un atributo que declara un espacio de nombres con un prefijo, puede crear un atributo donde el espacio de nombres del nombre del atributo es Xmlns y el nombre del atributo es el prefijo del espacio de nombres. El valor del atributo es el URI del espacio de nombres.

Ejemplo: Creación de dos espacios de nombres con prefijos

Este ejemplo declara dos espacios de nombres. Especifica el prefijo aw del espacio de nombres http://www.adventure-works.com y el prefijo fc del espacio de nombres www.fourthcoffee.com.

XNamespace aw = "http://www.adventure-works.com";
XNamespace fc = "www.fourthcoffee.com";
XElement root = new XElement(aw + "Root",
    new XAttribute(XNamespace.Xmlns + "aw", "http://www.adventure-works.com"),
    new XAttribute(XNamespace.Xmlns + "fc", "www.fourthcoffee.com"),
    new XElement(fc + "Child",
        new XElement(aw + "DifferentChild", "other content")
    ),
    new XElement(aw + "Child2", "c2 content"),
    new XElement(fc + "Child3", "c3 content")
);
Console.WriteLine(root);
Imports <xmlns:aw="http://www.adventure-works.com">
Imports <xmlns:fc="www.fourthcoffee.com">

Module Module1

    Sub Main()
        Dim root As XElement = _
            <aw:Root>
                <fc:Child>
                    <aw:DifferentChild>other content</aw:DifferentChild>
                </fc:Child>
                <aw:Child2>c2 content</aw:Child2>
                <fc:Child3>c3 content</fc:Child3>
            </aw:Root>
        Console.WriteLine(root)
    End Sub

This example produces the following output:

```xml
<aw:Root xmlns:aw="http://www.adventure-works.com" xmlns:fc="www.fourthcoffee.com">
  <fc:Child>
    <aw:DifferentChild>other content</aw:DifferentChild>
  </fc:Child>
  <aw:Child2>c2 content</aw:Child2>
  <fc:Child3>c3 content</fc:Child3>
</aw:Root>

Consulte también