我有以下xml文件:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.008.001.02">
<CstmrDrctDbtInitn>
<GrpHdr>
<MsgId>PRE20140526102710000011103P</MsgId>
<CreDtTm>2014-05-26T10:27:10</CreDtTm>
<NbOfTxs>4</NbOfTxs>
<CtrlSum>54.74</CtrlSum>
<InitgPty>
<Nm>PRESEN</Nm>
</InitgPty>
</GrpHdr>
<PmtInf>
<PmtInfId>VAF</PmtInfId>
<PmtTpInf>
<SvcLvl>
<Cd>SEPA</Cd>
</SvcLvl>
</PmtTpInf>
<ReqdColltnDt>2014-05-29</ReqdColltnDt>
<Cdtr>
<Nm>ACRED</Nm>
</Cdtr>
<DrctDbtTxInf>
<PmtId>
<EndToEndId>1410300003</EndToEndId>
</PmtId>
<InstdAmt Ccy="EUR">14.74</InstdAmt>
<DrctDbtTx>
<MndtRltdInf>
<MndtId>TX0300003</MndtId>
<DtOfSgntr>2009-10-31</DtOfSgntr>
</MndtRltdInf>
</DrctDbtTx>
<Dbtr>
<Nm>ENRIQUE</Nm>
</Dbtr>
<RmtInf>
<Ustrd>VA-14 0300003</Ustrd>
</RmtInf>
</DrctDbtTxInf>
<DrctDbtTxInf>
<PmtId>
<EndToEndId>1410300002</EndToEndId>
</PmtId>
<InstdAmt Ccy="EUR">10.53</InstdAmt>
<DrctDbtTx>
<MndtRltdInf>
<MndtId>TX0300002</MndtId>
<DtOfSgntr>2009-10-31</DtOfSgntr>
</MndtRltdInf>
</DrctDbtTx>
<Dbtr>
<Nm>JUAN</Nm>
</Dbtr>
<RmtInf>
<Ustrd>VA-14 0300002</Ustrd>
</RmtInf>
</DrctDbtTxInf>
</PmtInf>
<PmtInf>
<PmtInfId>VAR</PmtInfId>
<PmtTpInf>
<SvcLvl>
<Cd>SEPA</Cd>
</SvcLvl>
</PmtTpInf>
<ReqdColltnDt>2014-05-29</ReqdColltnDt>
<Cdtr>
<Nm>ACRED</Nm>
</Cdtr>
<DrctDbtTxInf>
<PmtId>
<EndToEndId>1410300007</EndToEndId>
</PmtId>
<InstdAmt Ccy="EUR">12.63</InstdAmt>
<DrctDbtTx>
<MndtRltdInf>
<MndtId>TX0300007</MndtId>
<DtOfSgntr>2009-10-31</DtOfSgntr>
</MndtRltdInf>
</DrctDbtTx>
<Dbtr>
<Nm>SERGIO</Nm>
</Dbtr>
<RmtInf>
<Ustrd>VA-14 0300007</Ustrd>
</RmtInf>
</DrctDbtTxInf>
<DrctDbtTxInf>
<PmtId>
<EndToEndId>1410300010</EndToEndId>
</PmtId>
<InstdAmt Ccy="EUR">16.84</InstdAmt>
<DrctDbtTx>
<MndtRltdInf>
<MndtId>TX0300010</MndtId>
<DtOfSgntr>2009-10-31</DtOfSgntr>
</MndtRltdInf>
</DrctDbtTx>
<Dbtr>
<Nm>MIGUEL ANGEL</Nm>
</Dbtr>
<RmtInf>
<Ustrd>VA-14 0300010</Ustrd>
</RmtInf>
</DrctDbtTxInf>
</PmtInf>
</CstmrDrctDbtInitn>
</Document>
我想插入标签的内容&lt; PmtInfId&gt;在每个相应的&lt; PmtId&gt;
我搜索结果如下:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.008.001.02">
<CstmrDrctDbtInitn>
<GrpHdr>
<MsgId>PRE20140526102710000011103P</MsgId>
<CreDtTm>2014-05-26T10:27:10</CreDtTm>
<NbOfTxs>4</NbOfTxs>
<CtrlSum>54.74</CtrlSum>
<InitgPty>
<Nm>PRESEN</Nm>
</InitgPty>
</GrpHdr>
<PmtInf>
<PmtInfId>VAF</PmtInfId>
<PmtTpInf>
<SvcLvl>
<Cd>SEPA</Cd>
</SvcLvl>
</PmtTpInf>
<ReqdColltnDt>2014-05-29</ReqdColltnDt>
<Cdtr>
<Nm>ACRED</Nm>
</Cdtr>
<DrctDbtTxInf>
<PmtId>
<PmtInfId>VAF</PmtInfId>
<EndToEndId>1410300003</EndToEndId>
</PmtId>
<InstdAmt Ccy="EUR">14.74</InstdAmt>
<DrctDbtTx>
<MndtRltdInf>
<MndtId>TX0300003</MndtId>
<DtOfSgntr>2009-10-31</DtOfSgntr>
</MndtRltdInf>
</DrctDbtTx>
<Dbtr>
<Nm>ENRIQUE</Nm>
</Dbtr>
<RmtInf>
<Ustrd>VA-14 0300003</Ustrd>
</RmtInf>
</DrctDbtTxInf>
<DrctDbtTxInf>
<PmtId>
<PmtInfId>VAF</PmtInfId>
<EndToEndId>1410300002</EndToEndId>
</PmtId>
<InstdAmt Ccy="EUR">10.53</InstdAmt>
<DrctDbtTx>
<MndtRltdInf>
<MndtId>TX0300002</MndtId>
<DtOfSgntr>2009-10-31</DtOfSgntr>
</MndtRltdInf>
</DrctDbtTx>
<Dbtr>
<Nm>JUAN</Nm>
</Dbtr>
<RmtInf>
<Ustrd>VA-14 0300002</Ustrd>
</RmtInf>
</DrctDbtTxInf>
</PmtInf>
<PmtInf>
<PmtInfId>VAR</PmtInfId>
<PmtTpInf>
<SvcLvl>
<Cd>SEPA</Cd>
</SvcLvl>
</PmtTpInf>
<ReqdColltnDt>2014-05-29</ReqdColltnDt>
<Cdtr>
<Nm>ACRED</Nm>
</Cdtr>
<DrctDbtTxInf>
<PmtId>
<PmtInfId>VAR</PmtInfId>
<EndToEndId>1410300007</EndToEndId>
</PmtId>
<InstdAmt Ccy="EUR">12.63</InstdAmt>
<DrctDbtTx>
<MndtRltdInf>
<MndtId>TX0300007</MndtId>
<DtOfSgntr>2009-10-31</DtOfSgntr>
</MndtRltdInf>
</DrctDbtTx>
<Dbtr>
<Nm>SERGIO</Nm>
</Dbtr>
<RmtInf>
<Ustrd>VA-14 0300007</Ustrd>
</RmtInf>
</DrctDbtTxInf>
<DrctDbtTxInf>
<PmtId>
<PmtInfId>VAR</PmtInfId>
<EndToEndId>1410300010</EndToEndId>
</PmtId>
<InstdAmt Ccy="EUR">16.84</InstdAmt>
<DrctDbtTx>
<MndtRltdInf>
<MndtId>TX0300010</MndtId>
<DtOfSgntr>2009-10-31</DtOfSgntr>
</MndtRltdInf>
</DrctDbtTx>
<Dbtr>
<Nm>MIGUEL ANGEL</Nm>
</Dbtr>
<RmtInf>
<Ustrd>VA-14 0300010</Ustrd>
</RmtInf>
</DrctDbtTxInf>
</PmtInf>
</CstmrDrctDbtInitn>
</Document>
我使用以下xsl:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="PmtId">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:copy-of select="ancestor::CstmrDrctDbtInitn/PmtInf/PmtInfId"/>
<xsl:apply-templates select="node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
此代码改编自帖子 XSLT to change XML in MS ACCESS import 结果不是我需要的。
感谢您的帮助。
答案 0 :(得分:1)
您应该将XML命名空间添加到XSLT,结果应该是:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:pain="urn:iso:std:iso:20022:tech:xsd:pain.008.001.02" exclude-result-prefixes="pain">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="pain:PmtId">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:copy-of select="ancestor::pain:PmtInf/pain:PmtInfId"/>
<xsl:apply-templates select="node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
我还调整了xsl:copy-of
一点,只复制了它的直接(大)父母的PmtInfId
。