Я пытался сравнить два файла XML, которые имеют одинаковый контент, но по разным строкам. Чтобы преодолеть это, я пытался сортировать XML-файлы на одном из дочерних узлов (который обычно отличается положением в обоих файлах).Сортировка XML-файла на основе значения узла
Вот мой пример 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>
Я пытаюсь разобраться на основе <membId>
узла для <RC>
родительского узла. Какой бы метод я ни пытался, мой документ не сортируется. Я пробовал использовать XSLT, но сортировка не работает. Я даже пытался написать скрипт python, но он не сортировался.
Вот мой питон скрипт -
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)
исполняет python test.py 2.xml membId
запустить скрипт (обратите внимание, что 2.xml этого имя файла для ввода XML и membId является тегом я искал).
Я по-настоящему признателен за любую помощь в том, где я ошибаюсь. Я только начинаю с Python, поэтому я мог бы сделать довольно очевидную ошибку. Для меня будет работать скрипт python или XSLT (или).
** 1 ** «* Я попытался с помощью XSLT, но сортировка не делает. работа. * «Пожалуйста, разместите свою попытку, чтобы мы могли ее исправить, вместо того, чтобы писать код для вас с нуля. - ** 2. ** Пока вы на нем, отправляйте также ожидаемый результат, так как «* sort на основе узла для родительского узла » - довольно загадочное требование. - ** 3. ** Почему ваш вопрос помечен 'XSLT 2.0'? Фактически вы используете процессор, поддерживающий XSLT 2.0? –
LXML Python поддерживает только XSLT 1.0, используя процессор libxslt. – Parfait
@ michael.hor257k Я отправлю еще один вопрос, просто с XSLT, который ищет помощь в этой части. И да, я использовал XSLT2.0, и именно поэтому я пометил его так. – Incognito