现在我正在从一个大型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>
或者我想要所有标签的前缀。
我该怎么做。