Condividi tramite


Come controllare i prefissi dello spazio dei nomi (LINQ to XML)

Questo articolo descrive come controllare i prefissi dello spazio dei nomi durante la serializzazione di un albero XML in C# e Visual Basic.

In molte situazioni non è necessario controllare i prefissi degli spazi dei nomi. Tuttavia, determinati strumenti di programmazione XML richiedono tale controllo. Ad esempio, è possibile che si intenda modificare un foglio di stile XSLT o un documento XAML contenente espressioni XPath incorporate che fanno riferimento a prefissi di spazi dei nomi specifici. In questo caso è importante che il documento sia serializzato con tali prefissi. Questo rappresenta il motivo più comune per implementare il controllo dei prefissi degli spazi dei nomi.

Un altro motivo per implementarlo è quando si vuole che gli utenti modifichino manualmente il documento XML e si vogliono creare prefissi che l'utente può digitare con maggior comodità. Ad esempio, se si intende generare un documento XSD, le convenzioni degli schemi consigliano l'uso di xs o xsd come prefisso per lo spazio dei nomi dello schema.

Per controllare i prefissi degli spazi dei nomi, si inseriscono attributi che dichiarano gli spazi dei nomi. Se si dichiarano gli spazi dei nomi con prefissi specifici, LINQ to XML proverà a rispettare tali prefissi durante la serializzazione.

Per creare un attributo che dichiara uno spazio dei nomi con un prefisso, viene creato un attributo in cui lo spazio dei nomi del nome dell'attributo è Xmlns e il nome dell'attributo è il prefisso dello spazio dei nomi. Il valore dell'attributo è l'URI dello spazio dei nomi.

Esempio: creare due spazi dei nomi con prefissi

In questo esempio vengono dichiarati due spazi dei nomi. Viene specificato il prefisso aw per lo spazio dei nomi http://www.adventure-works.com e il prefisso fc per lo spazio dei nomi 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>

Vedi anche