동일한 내용이지만 다른 줄에있는 두 개의 XML 파일을 비교하려고했습니다. 이를 극복하기 위해, 나는 자식 노드 중 하나 (일반적으로 두 파일의 위치가 다른 노드 중 하나)에서 XML을 정렬하려고했습니다.노드 값을 기반으로 XML 파일 정렬
는 여기에 내가 <RC>
부모 노드에 대한 <membId>
노드를 기반으로 정렬하는 데 노력하고 내 샘플 XML 파일
<Report>
<rptName>Sample</rptName>
<reportNameGrp>
<grpName>AggrDataSet</grpName>
<RC>
<rptSubHdr>
<membLglNam>Registered Customer 103</membLglNam>
<membId>RC103</membId>
<relCM>CM022</relCM>
</rptSubHdr>
</RC>
<RC>
<rptSubHdr>
<membLglNam>Registered Customer 055</membLglNam>
<membId>RC055</membId>
<relCM>CM022</relCM>
</rptSubHdr>
</RC>
<RC>
<rptSubHdr>
<membLglNam>Registered Customer 047</membLglNam>
<membId>RC047</membId>
<relCM>CM022</relCM>
</rptSubHdr>
</RC>
<RC>
<rptSubHdr>
<membLglNam>Registered Customer 015</membLglNam>
<membId>RC015</membId>
<relCM>CM022</relCM>
</rptSubHdr>
</RC>
<RC>
<rptSubHdr>
<membLglNam>Registered Customer 024</membLglNam>
<membId>RC024</membId>
<relCM>CM022</relCM>
</rptSubHdr>
</RC>
</reportNameGrp>
</Report>
입니다. 어떤 방법을 사용해도 내 문서를 정렬하지 못합니다. XSLT를 사용해 보았지만 정렬이 작동하지 않습니다. 필자는 파이썬 스크립트 작성을 시도해 보았지만 분류 작업을 수행하지 못했습니다. I 스크립트를 실행하는 데 python test.py 2.xml membId
를 실행 (즉 2.xml을 유의하시기 바랍니다 입력 XML의 파일 이름이고 membId 내가 찾고있는 태그입니다)
import sys
from lxml import etree
filename, tag = sys.argv[1:]
doc = etree.parse(filename, etree.XMLParser(remove_blank_text=True))
root = doc.getroot()
root[:] = sorted(root, key=lambda el: el.findtext(tag))
print etree.tostring(doc, pretty_print=True)
-
여기 내 파이썬 스크립트입니다.
내가 잘못 가고있는 곳에서 어떤 도움을 주셔서 감사합니다. 나는 파이썬으로 시작하고있다. 그래서 나는 꽤 명백한 실수를했을지도 모른다. 파이썬 스크립트 또는 XSLT 솔루션 (둘 중 하나)이 나에게 도움이 될 것입니다!
** 1 ** "* 나는 XSLT를 사용했지만, 정렬하지 않습니다. *. "코드를 처음부터 작성하는 대신, 고칠 수 있도록 시도를 게시하십시오. - ** 2 ** ** 부모 노드에 대해 노드를 기반으로 한 정렬은 다소 수수한 요구 사항이므로 예상 출력도 게시하십시오. - ** 3. ** 귀하의 질문에 'XSLT 2.0'태그가 붙은 이유는 무엇입니까? 실제로 XSLT 2.0을 지원하는 프로세서를 사용하고 있습니까? –
파이썬의 lxml은 libxslt 프로세서를 사용하는 XSLT 1.0 만 지원합니다. – Parfait
@ michael.hor257k 그 부분에 대한 도움을 구하는 XSLT와 함께 또 다른 질문을 게시 할 것입니다. 그리고 예, 저는 XSLT2.0을 사용하고 있었고 그 때문에 태그를 붙였습니다. – Incognito