为Dom元素的所有标签xml添加前缀

时间:2018-11-28 16:07:07

标签: java xml dom xmlbeans

现在我正在从一个大型xml文件中提取xml块。 因此,对于每个块,我都希望对其进行调整,使其具有与原始文件相同的前缀和名称空间。 实际bloc xml的类型是Element。

实际集团:

    <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));


                    }

错误是: enter image description here

他提出这个错误是正确的,因为当我调试时,我发现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>

或者我想要所有标签的前缀。

我该怎么做。

0 个答案:

没有答案