Sposób kontrolowania prefiksów przestrzeni nazw (LINQ to XML)
W tym artykule opisano sposób kontrolowania prefiksów przestrzeni nazw podczas serializacji drzewa XML w języku C# i Visual Basic.
W wielu sytuacjach nie trzeba kontrolować prefiksów przestrzeni nazw. Jednak niektóre narzędzia do programowania XML wymagają tego. Na przykład można manipulować arkuszem stylów XSLT lub dokumentem XAML zawierającym osadzone wyrażenia XPath odwołujące się do określonych prefiksów przestrzeni nazw. W takim przypadku ważne jest, aby dokument był serializowany z tymi prefiksami. Jest to częsta przyczyna kontrolowania prefiksów przestrzeni nazw.
Innym powodem jest to, że użytkownicy mają ręcznie edytować dokument XML i chcesz utworzyć prefiksy przestrzeni nazw, które są wygodne dla użytkownika do wpisywania. Na przykład możesz wygenerować dokument XSD. Konwencje schematów sugerują, że używasz nazwy xs
lub xsd
jako prefiksu dla przestrzeni nazw schematu.
Aby kontrolować prefiksy przestrzeni nazw, należy wstawić atrybuty, które deklarują przestrzenie nazw. Jeśli zadeklarujesz przestrzenie nazw z określonymi prefiksami, linQ to XML spróbuje rozpoznać prefiksy przestrzeni nazw podczas serializacji.
Aby utworzyć atrybut, który deklaruje przestrzeń nazw z prefiksem, należy utworzyć atrybut, w którym przestrzeń nazw nazwy atrybutu to Xmlns, a nazwa atrybutu jest prefiksem przestrzeni nazw. Wartość atrybutu to identyfikator URI przestrzeni nazw.
Przykład: tworzenie dwóch przestrzeni nazw, które mają prefiksy
W tym przykładzie zadeklarowane są dwie przestrzenie nazw. Określa prefiks aw
http://www.adventure-works.com
przestrzeni nazw i prefiks fc
przestrzeni www.fourthcoffee.com
nazw.
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>