2014-12-15 3 views
1

원시 XML을 원하는 XML로 변환해야합니다. 이는 내 응용 프로그램에서 이해할 수 있습니다.하위 DOM을 제거하지 않고 상위 요소를 제거하십시오.

DOM을 사용하여 (제한적으로 생각해보십시오.) 불행히도 저는 Java 만 사용할 수 있습니다. DOM.Have는 XSLT를 사용해 보았지만 사용하지 못했습니다.

입력 :

<?xml version="1.0" encoding="UTF-8" standalone="no"?><ns0:EMessage xmlns:ns0="http://www.abc/Something"> 
     <ns0:Header> 
     <ns0:Snumber>1613</ns0:Snumber> 
     </ns0:Header> 
     <ns0:Name>SomeEvent</ns0:Name> 
     <ns0:NameSpace>http://www.abc/Something.xsd</ns0:NameSpace> 
     <ns0:Id>3</ns0:Id> 
     <ns0:myProperty> 
      <ns0:Name>ExtId</ns0:Name> 
      <ns0:Value>TEST_ID_12</ns0:Value> 
     </ns0:myProperty> 
     <ns0:myProperty> 
      <ns0:Name>CVersion</ns0:Name> 
      <ns0:Value>0</ns0:Value> 
     </ns0:myProperty> 
     </ns0:EMessage> 
내 임상 시험에 지금까지

그리고 난 여기에 도달했습니다 구글. 내 위의 코드에서

<?xml version="1.0" encoding="UTF-8" standalone="no"?><ns0:EMessage xmlns:ns0="http://www.abc/Something"> 
<ns0:Header> 
<ns0:Snumber>1613</ns0:Snumber> 
</ns0:Header> 
<ns0:Name>SomeEvent</ns0:Name> 
<ns0:NameSpace>http://www.abc/Something.xsd</ns0:NameSpace> 
<ns0:Id>3</ns0:Id> 
<ns0:eventProperty> 
    <ExtId>TEST_ID_12</ExtId> 
    </ns0:eventProperty> 
    <ns0:eventProperty> 
    <CVersion>0</CVersion> 
    </ns0:eventProperty> 
</ns0:EMessage> 

이 나는대로 입력 원시 XML.But에서 가져온 <ns0:EMessage> 요소로 루트를 촬영하고 목록 값으로 새로운 요소를 작성하여 원하는 형태로 요소를 node.Converted 모든 노드를 촬영 한 </ns0:eventProperty>을 부모로 취했습니다.이 요소가 필요하지 않으므로 기본적으로이 부모 노드를 제거해야하며이 부모 노드에 <ns0:EMessage>의 자식이되어야합니다. 다른 요소를 건드릴 필요가 없습니다.

원하는 출력은

<?xml version="1.0" encoding="UTF-8" standalone="no"?><ns0:EMessage xmlns:ns0="http://www.abc/Something"> 
    <ns0:Header> 
    <ns0:Snumber>161003</ns0:Snumber> 
    </ns0:Header> 
    <ns0:Name>SomeEvent</ns0:Name> 
    <ns0:NameSpace>http://www.abc/Something.xsd</ns0:NameSpace> 
    <ns0:Id>3</ns0:Id> 
    <ExtId>TEST_ID_12</ExtId> 
    <CVersion>0</CVersion> 
    </ns0:EMessage> 

는 SO 사전에 now.Thanks을하는 데 도움이 내 best.Hope 봤어

그것은 내 자신 인 질문을 asnwer하는 이상한
+0

""노드를 만드는 코드를 표시 할 수 있습니까? – syllabus

+0

@syllabusIt 해당 노드를 실제로 만들고 있지 않습니다. 원시 XML을 읽고 오전 및 eventProperty node.But로 자식을 제거 할 부모 그것을 제거 할 수 없습니다 및 그것도 XML 출력에 상주합니다. 그리고 그것은 반대입니다 무엇을 원하는지. eventProperty 요소는 출력 xml에 있으면 안되며 자식은 뿌리의 자식이되어야합니다. 어쨌든 – NeverGiveUp161

+0

덕분에 그 – syllabus

답변

2

마지막으로 내가 논리를 가지고이에 대한 답변 .

<ns0:eventProperty> 상위 요소에 요소를 추가 할 것을 권장하고 새로 작성한 요소를 루트에 직접 추가해야합니다 (<ns0:EMessage>).

참고이 :이 모든 과정이 하나의 loop.Use 현재 부모에서 수행하고 데이터를 사용하는 것은 root.appendChild(newChildElement)을 수행하여 다음 모든 하위 요소에 대해 실행됩니다 같은 루프에서 루트로 immideate 아이를 만들 현재 요소를 삭제 한 후 부모 요소를 제거합니다.

관련 문제