Теперь я извлекаю блоки 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>
или мне нужен префикс для всех тегов.
Как я могу это сделать.