Добавить префикс для всех тегов XML элемента Dom - PullRequest
0 голосов
/ 28 ноября 2018

Теперь я извлекаю блоки xml из большого файла xml.Поэтому для каждого блока я хочу настроить его таким же префиксом и пространством имен, как в исходном файле.тип фактического блока xml - Элемент.

Фактический блок:

    <xml-fragment>
  <Derived_Event_Code>xxx</Derived_Event_Code>
  <Effective_Moment>2018-10-25T07:29:12</Effective_Moment>
  <Entry_Moment>2018-10-25T07:29:12</Entry_Moment>
  <Related_Person isUpdated="1">
    <Legal_Name>
      <First_Name>xxxx</First_Name>
      <Last_Name>xxxx</Last_Name>
    </Legal_Name>
  </Related_Person>
</xml-fragment>

желаемый результат:

<xml-fragment xmlns:peci="urn:com.uri/peci">
  <peci:Derived_Event_Code>DTA</peci:Derived_Event_Code>
  <peci:Effective_Moment>2018-10-25T07:29:12</peci:Effective_Moment>
  <peci:Entry_Moment>2018-10-25T07:29:12</peci:Entry_Moment>
  <peci:Related_Person isUpdated="1">
    <peci:Legal_Name>
      <peci:First_Name>xxxx</peci:First_Name>
      <peci:Last_Name>xxxx</peci:Last_Name>
    </peci:Legal_Name>
  </peci:Related_Person>
</xml-fragment>

Я пробовал этот код:

Element originalDocumentElement = eltF;     
                    Element NewElement=eltF.getOwnerDocument().createElementNS(namespace, eltF.getNodeName());
                    NewElement.setPrefix("peci");

                    NodeList list = eltF.getChildNodes();
                    int j=1;
                    while(list.getLength()!=0) {
                        Node Exp =list.item(0);
                        System.out.println(Exp.getNodeName());
                        System.out.println(eltF.getNodeName());
                        Element NewSubElmnt=list.item(0).getOwnerDocument().createElementNS(namespace, list.item(0).getNodeName());
                        NewSubElmnt.setNodeValue(list.item(0).getNodeValue().toString());
                        NewSubElmnt.setPrefix("peci");


                        NewElement.appendChild(list.item(0));


                    }

Ошибка была: введите описание изображения здесь

, и он прав, чтобы поднять эту ошибку, потому что когда я debeug, я обнаружил, что list.item(0).getNodeValue() содержит "#text" и нене может содержать имя узла.

однако, когда я делаю в комментарии блок создания новых дочерних элементов:

                        Element NewElement=eltF.getOwnerDocument().createElementNS(namespace, eltF.getNodeName());
                        NewElement.setPrefix("peci");

                        NodeList list = eltF.getChildNodes();
                        int j=1;
                        while(list.getLength()!=0) {
//                          Node Exp =list.item(0);
//                          System.out.println(Exp.getNodeName());
//                          System.out.println(eltF.getNodeName());
//                          Element NewSubElmnt=list.item(0).getOwnerDocument().createElementNS(namespace, list.item(0).getNodeName());
//                          NewSubElmnt.setNodeValue(list.item(0).getNodeValue().toString());
//                          NewSubElmnt.setPrefix("peci");


                            NewElement.appendChild(list.item(0));


                        }

                        /*********/

                        /*********/
                        factory=XmlObject.Factory.parse(NewElement);        
                         System.out.println(factory.toString()); 

В консоли я получаю весь новый блок, как я хочу, нопрефикс присваивается только первому родительскому узлу

<peci:xml-fragment xmlns:peci="urn:com.uri/peci">
  <Derived_Event_Code>xxx</Derived_Event_Code>
  <Effective_Moment>2018-10-25T07:29:12</Effective_Moment>
  <Entry_Moment>2018-10-25T07:29:12</Entry_Moment>
  <Related_Person isUpdated="1">
    <Legal_Name>
      <First_Name>xxxx</First_Name>
      <Last_Name>xxxxx</Last_Name>
    </Legal_Name>
  </Related_Person>
</peci:xml-fragment>

или мне нужен префикс для всех тегов.

Как я могу это сделать.

...