Kopiowanie istniejących węzłów z jednego dokumentu do innego
Metoda ImportNode to mechanizm, za pomocą którego węzeł lub całe poddrzewo węzła jest kopiowane z jednego obiektu XmlDocument do innego. Węzeł zwrócony z wywołania jest kopią węzła z dokumentu źródłowego, w tym wartości atrybutów, nazwy węzła, typu węzła i wszystkich atrybutów związanych z przestrzenią nazw, takich jak prefiks, nazwa lokalna i przestrzeń nazw Uniform Resource Identifier (URI). Dokument źródłowy nie został zmieniony. Po zaimportowaniu węzła nadal trzeba dodać go do drzewa przy użyciu jednej z metod używanych do wstawiania węzłów.
Gdy węzeł jest dołączony do nowego dokumentu, nowy dokument jest właścicielem węzła. Przyczyną jest to, że każdy węzeł, podczas tworzenia, ma dokument będący właścicielem, nawet jeśli węzły są tworzone w oddzielnych fragmentach dokumentu. Jest to wymaganie modelu DOM (XML Document Object Model) i jest wymuszane przez projekt tworzenia fabryki w klasie XmlDocument . Na przykład CreateElement jest jedynym sposobem tworzenia nowych węzłów.
W zależności od typu węzła zaimportowanego węzła i wartości parametru głębokiego dodatkowe informacje są kopiowane zgodnie z potrzebami. Ta metoda próbuje zdublować zachowanie oczekiwane, jeśli fragment kodu XML lub źródła HTML został skopiowany z jednego dokumentu do innego, co oznacza fakt, że w przypadku kodu XML dwa dokumenty mogą mieć różne definicje typu dokumentu (DTD).
W poniższej tabeli opisano konkretne zachowanie dla każdego typu węzła, który można zaimportować.
Typ węzła | parametr deep ma wartość true | parametr deep ma wartość false |
---|---|---|
XmlAttribute | Właściwość Specified jest ustawiona na wartość true dla atrybutu XmlAttribute. Elementy potomne źródłowego atrybutu XmlAttribute są rekursywnie importowane, a wynikowe węzły są ponownie zmontowane w celu utworzenia odpowiedniego poddrzewa. | Parametr deep nie ma zastosowania do węzłów XmlAttribute, ponieważ zawsze niosą ze sobą węzły podrzędne podczas importowania. |
XmlCDataSection | Kopiuje węzeł, w tym jego dane. | Kopiuje węzeł, w tym jego dane. |
XmlComment | Kopiuje węzeł, w tym jego dane. | Kopiuje węzeł, w tym jego dane. |
Xmldocumentfragment | Elementy podrzędne węzła źródłowego są rekursywnie importowane, a wynikowe węzły są ponownie zmontowane w celu utworzenia odpowiedniego poddrzewa. | Zostanie utworzony pusty element XmlDocumentFragment . |
Xmldocumenttype | Kopiuje węzeł, w tym jego dane.* | Kopiuje węzeł, w tym jego dane.* |
XmlElement | Elementy potomne elementu źródłowego są rekursywnie importowane, a wynikowe węzły są ponownie zmontowane w celu utworzenia odpowiedniego poddrzewa. Uwaga: Atrybuty domyślne nie są kopiowane. Jeśli dokument importowany do definiuje atrybuty domyślne dla tej nazwy elementu, zostaną one przypisane. | Określone węzły atrybutów elementu źródłowego są importowane, a wygenerowane węzły XmlAttribute są dołączone do nowego elementu. Węzły podrzędne nie są kopiowane. Uwaga: Atrybuty domyślne nie są kopiowane. Jeśli dokument importowany do definiuje atrybuty domyślne dla tej nazwy elementu, zostaną one przypisane. |
XmlEntityReference | Ponieważ dokumenty źródłowe i docelowe mogą mieć zdefiniowane inaczej jednostki, ta metoda kopiuje tylko węzeł XmlEntityReference . Tekst zastępczy nie jest dołączony. Jeśli dokument docelowy ma zdefiniowaną jednostkę, zostanie przypisana jego wartość. | Ponieważ dokumenty źródłowe i docelowe mogą mieć zdefiniowane inaczej jednostki, ta metoda kopiuje tylko węzeł XmlEntityReference . Tekst zastępczy nie jest dołączony. Jeśli dokument docelowy ma zdefiniowaną jednostkę, zostanie przypisana jego wartość. |
XmlProcessingInstruction | Kopiuje wartość docelową i dane z zaimportowanego węzła. | Kopiuje wartość docelową i dane z zaimportowanego węzła. |
Xmltext | Kopiuje węzeł, w tym jego dane. | Kopiuje węzeł, w tym jego dane. |
XmlSignificantWhitespace | Kopiuje węzeł, w tym jego dane. | Kopiuje węzeł, w tym jego dane. |
XmlWhitespace | Kopiuje węzeł, w tym jego dane. | Kopiuje węzeł, w tym jego dane. |
XmlDeclaration | Kopiuje wartość docelową i dane z zaimportowanego węzła. | Kopiuje wartość docelową i dane z zaimportowanego węzła. |
Wszystkie inne typy węzłów | Nie można zaimportować tych typów węzłów. | Nie można zaimportować tych typów węzłów. |
Uwaga
Mimo że można zaimportować węzły DocumentType, dokument może mieć tylko jeden typ Dokumentu. Dlatego po zaimportowaniu typu dokumentu przed wstawieniem go do drzewa należy upewnić się, że w dokumencie nie ma żadnego typu dokumentu. Aby uzyskać informacje na temat usuwania węzłów, zobacz Usuwanie węzłów, zawartości i wartości z dokumentu XML.