Привет, мой ввод - это что-то вроде этого.Объединить все дочерние узлы соответствующего родителя под первым родителем, если значение родительского узла соответствует
<?xml version="1.0" encoding="UTF-8"?>
<Claim>
<Mileage>9837</Mileage>
<DamagePosition>
<DamageSeqNumber>3</DamageSeqNumber>
<DamageCode>2727004</DamageCode>
<PartPosition>
<SeqNumber>1</SeqNumber>
<PartNumber>A2035400253</PartNumber>
</PartPosition>
</DamagePosition>
<DamagePosition>
<DamageSeqNumber>1</DamageSeqNumber>
<DamageCode>2727004</DamageCode>
<PartPosition>
<SeqNumber>3</SeqNumber>
<PartNumber>A1409910055</PartNumber>
</PartPosition>
</DamagePosition>
<DamagePosition>
<DamageSeqNumber>8</DamageSeqNumber>
<DamageCode>2727004</DamageCode>
<OperationPosition>
<SeqNumber>8</SeqNumber>
<Opcode>02-2710-01</Opcode>
</OperationPosition>
</DamagePosition>
<DamagePosition>
<DamageSeqNumber>4</DamageSeqNumber>
<DamageCode>3221136</DamageCode>
<PartPosition>
<SeqNumber>4</SeqNumber>
<PartNumber>A2033202889</PartNumber>
</PartPosition>
</DamagePosition>
</Claim>
и желаемый результат:
<?xml version="1.0" encoding="UTF-8"?>
<Claim>
<Mileage>9837</Mileage>
<DamagePosition>
<DamageSeqNumber>3</DamageSeqNumber>
<DamageCode>2727004</DamageCode>
<OperationPosition>
<SeqNumber>8</SeqNumber>
<Opcode>02-2710-01</Opcode>
</OperationPosition>
<PartPosition>
<SeqNumber>1</SeqNumber>
<PartNumber>A2035400253</PartNumber>
</PartPosition>
<PartPosition>
<SeqNumber>3</SeqNumber>
<PartNumber>A1409910055</PartNumber>
</PartPosition>
<OperationPosition>
<SeqNumber>8</SeqNumber>
<Opcode>02-2710-01</Opcode>
</OperationPosition>
</DamagePosition>
<DamagePosition>
<DamageSeqNumber>4</DamageSeqNumber>
<DamageCode>3221136</DamageCode>
<PartPosition>
<SeqNumber>4</SeqNumber>
<PartNumber>A2033202889</PartNumber>
</PartPosition>
</DamagePosition>
</Claim>
Я попробовал следующий XSLT:
<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="kuserID" match="DamagePosition" use="DamageCode"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*">
<xsl:sort select="DamageCode" data-type="number"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match=
"DamagePosition|DamageCode
|PartPosition"/>
<xsl:template match=
"DamagePosition
[generate-id()
=
generate-id(key('kuserID', DamageCode)[1])
]">
<DamagePosition>
<xsl:copy-of select="DamageCode"/>
<xsl:apply-templates mode="copy" select="key('kuserID',DamageCode)" />
</DamagePosition>
</xsl:template>
<xsl:template match="DamagePosition" mode="copy">
<PartPosition>
<xsl:apply-templates/>
</PartPosition>
</xsl:template>
</xsl:stylesheet>
, и это дает мне Ouput, как показано ниже, хотя он способен группировать дочерние элементы, имеющие одинаковый DamageCode, но не выдавая желаемого вывода, он не копирует все теги под позицию детали, только seqNumber отображается на выходе. Также любая помощь очень ценится. Спасибо за помощь.
<Claim>
<Mileage>9837</Mileage>
<DamagePosition>
<DamageCode>2727004</DamageCode>
<PartPosition>
<DamageSeqNumber>3</DamageSeqNumber>
</PartPosition>
<PartPosition>
<DamageSeqNumber>1</DamageSeqNumber>
</PartPosition>
<PartPosition>
<DamageSeqNumber>8</DamageSeqNumber>
<OperationPosition>
<SeqNumber>8</SeqNumber>
<Opcode>02-2710-01</Opcode>
</OperationPosition>
</PartPosition>
</DamagePosition>
<DamagePosition>
<DamageCode>3221136</DamageCode>
<PartPosition>
<DamageSeqNumber>4</DamageSeqNumber>
</PartPosition>
</DamagePosition>
</Claim>
Я закрыл свои другие два вопроса. В будущем, пожалуйста, не отправляйте один и тот же вопрос несколько раз. –