Språk

Så här styr du namnområdesprefix (LINQ till XML)

Den här artikeln beskriver hur du kontrollerar namnområdesprefix när du serialiserar ett XML-träd i C# och Visual Basic.

I många situationer är det inte nödvändigt att kontrollera namnområdesprefix. Vissa XML-programmeringsverktyg kräver det dock. Du kan till exempel manipulera ett XSLT-formatmallar eller ett XAML-dokument som innehåller inbäddade XPath-uttryck som refererar till specifika namnområdesprefix. I sådana fall är det viktigt att dokumentet serialiseras med dessa prefix. Det här är en vanlig orsak till att kontrollera namnområdesprefix.

En annan orsak är att du vill att användarna ska redigera XML-dokumentet manuellt och att du vill skapa namnområdesprefix som är praktiska för användaren att skriva. Du kan till exempel generera ett XSD-dokument. Konventioner för scheman tyder på att du använder antingen xs eller xsd som prefix för schemanamnområdet.

Om du vill kontrollera namnområdesprefix infogar du attribut som deklarerar namnområden. Om du deklarerar namnrymderna med specifika prefix försöker LINQ till XML att följa namnområdesprefixen vid serialisering.

Om du vill skapa ett attribut som deklarerar ett namnområde med ett prefix skapar du ett attribut där namnområdet för attributets namn är Xmlnsoch namnet på attributet är namnområdesprefixet. Värdet för attributet är URI för namnområdet.

Exempel: Skapa två namnområden som har prefix

I det här exemplet deklareras två namnområden. Den anger prefixet aw för http://www.adventure-works.com namnområdet och prefixet fc för www.fourthcoffee.com namnområdet.

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>

Se även