2011-08-12 6 views
1

XML 문서를 업데이트하는 데 XMLSlurper를 사용하는 데 문제가 있습니다. 대부분의 것들이 작동하지만 어떤 상황에서는 "찾기"가 방금 추가 한 노드 (appendNode)를 찾지 못합니다. 새로운 노드는 처리가 끝날 때 거기에 있지만 자식을 추가하는 도중에 발견되지 않습니다.XMLSlurper appendNode에 변경 사항이 표시되지 않습니다.

새 노드를 찾는 데 parseText 및/또는 StreaMarkupBuilder (아래 참조)를 다시 호출해야한다는 XMLSlurper에 관한 게시물을 발견했습니다. 정말?! 솔직히 확인해 봤으면 좋겠어.

다음은 코드 단편입니다. 노드가 방금 추가 되었더라도 "찾기"는 NoChild를 가져옵니다.

codeNode.appendNode { 
    'lab:vendorData'() {} 
} 
vendorNode = codeNode.children().find { it.name() == "vendorData" } 

는 "appendNode의 doea 직접 slurped 문서를 수정할 수 없습니다. 편집이 적용된다"즉시 "문서가 StreamingMarkupBuilder을 사용하여 작성된 것입니다." http://markmail.org/message/5nmxbhwna7hr5zcq#query:related%3A5nmxbhwna7hr5zcq+page:1+mid:bkdesettsnfnieno+state:results

왜 새 노드를 찾을 수 없습니까?

+0

메일 링리스트 게시물 대신 labDoc의 –

답변

0

이것이 내가 일해야하는 것입니다. 우아한 아니라, 과거의 "갱신"문제를 가지고 : 당신이 발견

... 
codeNode.appendNode { 
    'lab:vendorData'() {} 
} 
//-- must re-slurp to see appended node 
labDoc = new XmlSlurper().parseText(serializeXml(labDoc)) 
codeNode = getResultNodeFor(nextResult.getCode()); 
vendorNode = codeNode.children().find { it.name() == "vendorData" } 
... 
def String serializeXml(GPathResult xml){ 
XmlUtil.serialize(new StreamingMarkupBuilder().bind { 
     mkp.declareNamespace("lab", "www.myco.com/LabDocument") 
     mkp.yield labDoc 
    }) 

}

+1

"mkp.yield XML"올를? – yihtserns