我有这个xml。
import pandas as pd
if __name__ == '__main__':
sheet = pd.read_csv("labels.csv", header=None)
sheet = sheet.append([[41, 42, 42, 44, 45]], ignore_index=True)
当另一个具有相同“ orderid”的节点存在时,我需要删除“消息”节点(重复检查)。 我正在使用此xsl。
<list>
<message ref="00001">
<entry>
<orderid>P001</orderid>
<timestamp>20200109085816092</timestamp>
</entry>
</message>
<message ref="00002">
<entry>
<orderid>P002</orderid>
<timestamp>20200109085813556</timestamp>
</entry>
</message>
<message ref="00003">
<entry>
<orderid>P003</orderid>
<timestamp>20200109085814612</timestamp>
</entry>
</message>
<message ref="00004">
<entry>
<orderid>P001</orderid>
<timestamp>20010109085816092</timestamp>
</entry>
</message>
<message ref="00005">
<entry>
<orderid>P002</orderid>
<timestamp>20020109085813556</timestamp>
</entry>
</message>
<message ref="00006">
<entry>
<orderid>P003</orderid>
<timestamp>20030109085814612</timestamp>
</entry>
</message>
但是输出包含不需要的“ message”标签(带有ref =“ 0004”,“ 0005”和“ 0006”)。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="kOrderId" match="entry" use="orderid"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="entry[not(generate-id() = generate-id(key('kOrderId', orderid)[1]))]"/>
我需要从输出中删除这些多余的标签。 我该如何实现? 谢谢。
答案 0 :(得分:1)
如果要删除重复的message
元素,请使密钥和模板匹配message
,而不是entry
:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="kOrderId" match="message" use="entry/orderid"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="message[not(generate-id() = generate-id(key('kOrderId', entry/orderid)[1]))]"/>
</xsl:stylesheet>
请注意,这假设message
包含一个entry
,