Будет весьма полезно, если вы сможете высказать свои лучшие мысли о xslt и о простейшем способе достижения результата ниже.
Случай 1: -На счет / acc4300, если поле empid отсутствует. Решение: - Прочтите значение empid из учетной записи / Fintrans [1] / acc4300 и поместить его в учетную запись / acc4300
Случай 2: - Под учетной записью / acc4300, если поле empid уже существует Решение: - Ничего не делать
Случай 3: - Если учетная запись / acc4300 отсутствует Решение: - Ничего не делать
Ввод XML:
<Root>
<corp att="abc">
<account number="111">
<acc4300>
<name>stack</name>
//empid tag is not present here as in first occurance, so I want to read it from below node of Fintrans and the value should be 5678 in output xml
</acc4300>
<Fintrans>
<Amount>12.00</Amount>
<Tax>1.00</Tax>
<empid>5678</empid>
</fintrans>
<Fintrans>
<Amount>112.00</Amount>
<Tax>13.00</Tax>
<empid>5678</empid>
</fintrans>
</account>
<account number="321">
<acc4300>
<name>stack1</name>
//empid tag is not present here as in first occurance, so I want to read it from below node of Fintrans and the value should be 5678 in output xml
</acc4300>
<Fintrans>
<Amount>152.00</Amount>
<Tax>19.00</Tax>
<empid>9734</empid>
</fintrans>
<Fintrans>
<Amount>142.00</Amount>
<Tax>17.00</Tax>
<empid>9734</empid>
</fintrans>
</account>
<account number="222">
<acc4300>
<name>overflow</name>
<empid>1234</empid>
// Do nothing to employee id as already in input file empid is present under node acc4300
</acc4300>
<Fintrans>
<Amount>121.00</Amount>
<Tax>15.00</Tax>
<empid>1234</empid>
</fintrans>
<Fintrans>
<Amount>122.00</Amount>
<Tax>15.00</Tax>
<empid>1234</empid>
</fintrans>
</account>
<account number="333">
//Since acc400 tag is missing in this block do nothing.
<Fintrans>
<Amount>12.00</Amount>
<Tax>1.00</Tax>
<empid>4285</empid>
</fintrans>
<Fintrans>
<Amount>112.00</Amount>
<Tax>13.00</Tax>
<empid>4285</empid>
</fintrans>
</account>
</corp>
<corp att="asfd">
...........
...........
...........
</corp>
</Root>
Результат должен выглядеть следующим образом
<Root>
<corp att="abc">
<account number="111">
<acc4300>
<name>stack</name>
<empid>5678</empid>
</acc4300>
<Fintrans>
<Amount>12.00</Amount>
<Tax>1.00</Tax>
<empid>5678</empid>
</fintrans>
<Fintrans>
<Amount>112.00</Amount>
<Tax>13.00</Tax>
<empid>5678</empid>
</fintrans>
</account>
<account number="321">
<acc4300>
<name>stack1</name>
<empid>9734</empid>
</acc4300>
<Fintrans>
<Amount>152.00</Amount>
<Tax>19.00</Tax>
<empid>9734</empid>
</fintrans>
<Fintrans>
<Amount>142.00</Amount>
<Tax>17.00</Tax>
<empid>9734</empid>
</fintrans>
</account>
<account number="222">
<acc4300>
<name>overflow</name>
<empid>1234</empid>
</acc4300>
<Fintrans>
<Amount>121.00</Amount>
<Tax>15.00</Tax>
<empid>1234</empid>
</fintrans>
<Fintrans>
<Amount>122.00</Amount>
<Tax>15.00</Tax>
<empid>1234</empid>
</fintrans>
</account>
<account number="333">
<Fintrans>
<Amount>12.00</Amount>
<Tax>1.00</Tax>
<empid>4285</empid>
</fintrans>
<Fintrans>
<Amount>112.00</Amount>
<Tax>13.00</Tax>
<empid>4285</empid>
</fintrans>
</account>
</corp>
<corp att="asfd">
...........
...........
...........
</corp>
</Root>
Примечание : - Это образец XML, и у меня есть более 500 других полей в исходном XML, поэтому написание XSLT для каждого узла невозможно. Пожалуйста, предложите любой лучший способ с версией 1.0 или 2.0 XSLT.