同じ内容であるが異なる行にある2つの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を使ってみましたが、並べ替えは機能しません。私もpythonスクリプトを書こうとしましたが、それは並べ替えに失敗します。私は(2.xmlは、入力XMLのファイル名であるとmembIdは私が探していたタグであることに注意してください)スクリプトを実行するpython test.py 2.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)
- ここ
は私のPythonスクリプトです。
私が間違っているところで本当に助けてもらえますか?私はちょうどPythonから始めているので、かなり明白な間違いをしているかもしれません。 PythonスクリプトまたはXSLTソリューション(いずれか)が私のために機能します!
** 1 **「*私は、XSLTを使用してみましたが、ソートはしていません。 *あなたのコードを最初から書くのではなく、修正できるように、あなたの試みを投稿してください。 - ** 2。**あなたがそれをしている間に、 "ノードに基づくソート親ノードのノード*"は予想外の出力です。 - ** 3。**あなたの質問に「XSLT 2.0」というタグが付いているのはなぜですか?実際にXSLT 2.0をサポートするプロセッサを使用していますか? –
Pythonのlxmlは、libxsltプロセッサを使用するXSLT 1.0のみをサポートしています。 – Parfait
@ michael.hor257k XSLTを使用して、その部分のヘルプを求める別の質問を投稿します。そして、はい、私はXSLT2.0を使用していたので、それがタグ付けされています。 – Incognito