Как сделать новый документ из подмножества другого документа? - PullRequest
2 голосов
/ 24 июня 2010

Допустим, у нас есть org.w3c.dom.Document, представляющий следующий XML:

<Fruits>
  <Apples>
    <Red/>
    <Green/>
  </Apples>
</Fruits>

Если мы знаем, что документ всегда будет содержать корень <Fruits> только с одним потомком (в данном случае <Apples>, но имя потомка обычно неизвестно), как мы можем сделать этого потомка корнем новый org.w3c.dom.Document? Другими словами, этот новый документ должен представлять следующий XML:

<Apples>
  <Red/>
  <Green/>
</Apples>

Моя проблема в том, что когда я пытаюсь извлечь дочерний элемент, я не могу заставить его забыть своего родителя (он все еще запоминает свою позицию в исходном документе).

Ответы [ 2 ]

2 голосов
/ 24 июня 2010

Примерно так:

    Node apples = doc.getFirstChild().getFirstChild(); 
            //or whatever is your way to find the node to copy
    Document newDocument = builder.newDocument();
    Node applesCopy = newDocument.importNode(apples, true);
    newDocument.appendChild(applesCopy);

По сути, вы получаете узел из старого документа, импортируете его в новый документ и добавляете его сверху.

1 голос
/ 24 июня 2010

Жизнеспособная альтернатива приведенному вами примеру - работать с неразобранными строками и использовать регулярное выражение для выделения нужной части.

Это не подходит для более сложной обработки. Но это, вероятно, самое простое и эффективное решение для простых случаев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...