Копирование определенных узлов с помощью Java

#java #xml #copy #rft

#java #xml #Копировать #rft

Вопрос:

Я пытаюсь прочитать / скопировать определенную часть xml-документа на JAVA, а затем сохранить эту часть как новый XML-документ. Итак, как в примере ниже, вы видите studentinfo и контактную информацию, я просто хочу выбрать studentinfo и скопировать всю область, таким образом, узлы и элементы. Я могу найти информацию только о выборе только элемента или только узлов.

Поэтому помощь была бы оценена, спасибо.

 <header>
<body>
    <studentinfo>
        <name>Student Name<name>
        <studentid>0987654321<studentid>
        <Location>USA<Location>
    <studentinfo>
    <contactinfo>
        <email>email@email.com<email>
        <address>somewhere 1<address>
        <postalcode>123456<postalcode>
    <contactinfo>
<body>
<header>
  

Комментарии:

1. Что вы используете для обработки XML (анализаторы, фреймворки и т.д.)?

2. Вы можете либо проанализировать xml, либо использовать xptath, чтобы получить интересующий вас раздел.

Ответ №1:

Я собираюсь сделать большое предположение, и это то, что вы используете org.w3c.dom.Document api.

Это двухэтапный процесс:

 Document doc = parse(xmlSource);

Document targetDoc = openTargetDoc();
Node copyTo = findWhereYouWantToCopyStuffTo(targetDoc);

// Find the node or nodes to want to copy.. could use XPath or some other search
NodeList studentinfoList = doc.getElementsByTagName("studentinfo");

// for each found... make a copy (via importNode) and attach to some point in the target doc
for( int i = 0; i < studnetinfoList.getLength(); i    ){
    Node n = studentinfoList.item(i);
    Node copyOfn = targetDoc.importNode(n,true);
    copyTo.appendChild(copyOfn);
}
  

Если это не то, что вы ищете, возможно, вам потребуется добавить немного больше деталей о том, что вы хотите скопировать и куда, используя какой api и т.д.

Комментарии:

1. что именно представляет собой метод «findwhereouwanttocopystuffto»?

2. если вы не будете немного более конкретны в отношении того, куда вы хотите скопировать, на какие узлы, не могу ответить на этот вопрос :).. Я предполагаю, что вы копируете узлы в другой документ.. поэтому функция findWhereYouWantToCopyStuffTo() должна найти местоположение в целевом документе и вернуть его. Примечание вышесказанное также можно использовать для копирования узлов в пределах одного документа.