Udostępnij za pośrednictwem


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.

Zobacz też