سؤال

هل هناك أي طريقة لنسخ عنصر (عميق) من مثيل Domdoccument إلى آخر؟

<Document1>
  <items>
    <item>1</item>
    <item>2</item>
    ...
  </items>
</Document1>

<Document2>
  <items>
  </items>
</Document>

أحتاج إلى نسخ / Document1 / العناصر / * إلى / المستند 2 / العناصر /.

يبدو أن Domdocument لا تتمتع بطرق لاستيراد العقد من الدوموسطي الأخرى. حتى لا يمكن أن تخلق العقد من نص XML.

بالطبع يمكنني تحقيق ذلك باستخدام عمليات السلسلة، ولكن ربما هناك حل أبسط؟

هل كانت مفيدة؟

المحلول

يمكنك استعمال ال كلونينود طريقة وتمرير true معامل. تشير المعلمة إلى ما إذا كنت تريد استنساخ جميع العقد الفردية من العقدة المشار إليها.

نصائح أخرى

في جاوة:

void copy(Element parent, Element elementToCopy)
{
   Element newElement;

   // create a deep clone for the target document:
   newElement = (Element) parent.getOwnerDocument().importNode(elementToCopy, true);

   parent.appendChild(newElement);
}

ستسخن الوظيفة التالية وثيقة وحفظ أساسية <!DOCTYPE>, ، وهذا ليس صحيحا باستخدام Transformer.

 public static Document copyDocument(Document input) {
        DocumentType oldDocType = input.getDoctype();
        DocumentType newDocType = null;
        Document newDoc;
        String oldNamespaceUri = input.getDocumentElement().getNamespaceURI();
        if (oldDocType != null) {
            // cloning doctypes is 'implementation dependent'
            String oldDocTypeName = oldDocType.getName();
            newDocType = input.getImplementation().createDocumentType(oldDocTypeName,
                                                                      oldDocType.getPublicId(),
                                                                      oldDocType.getSystemId());
            newDoc = input.getImplementation().createDocument(oldNamespaceUri, oldDocTypeName,
                                                              newDocType);
        } else {
            newDoc = input.getImplementation().createDocument(oldNamespaceUri,
                                                              input.getDocumentElement().getNodeName(),
                                                              null);
        }
        Element newDocElement = (Element)newDoc.importNode(input.getDocumentElement(), true);
        newDoc.replaceChild(newDocElement, newDoc.getDocumentElement());
        return newDoc;
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top