Xml 如何删除从顶部节点向下2级的子节点
我有下面的XML,我只想删除子节点cstmrcdtrfinitn/PmtInf/Dbtr/Id,并保留其他节点Xml 如何删除从顶部节点向下2级的子节点,xml,xslt,Xml,Xslt,我有下面的XML,我只想删除子节点cstmrcdtrfinitn/PmtInf/Dbtr/Id,并保留其他节点 <?xml version="1.0" encoding="UTF-8"?> <CstmrCdtTrfInitn> <GrpHdr>...</GrpHdr> <PmtInf> <PmtInfId>PInfId20180824a</PmtInfId> <
<?xml version="1.0" encoding="UTF-8"?>
<CstmrCdtTrfInitn>
<GrpHdr>...</GrpHdr>
<PmtInf>
<PmtInfId>PInfId20180824a</PmtInfId>
<PmtMtd>TRF</PmtMtd>
<PmtTpInf>...</PmtTpInf>
<ReqdExctnDt>2018-08-24</ReqdExctnDt>
<Dbtr>
<Nm>ABC US Company</Nm>
<PstlAdr>...</PstlAdr>
<Id>
<OrgId>
<Othr>
<Id>222222222</Id>
</Othr>
</OrgId>
</Id>
</Dbtr>
<DbtrAcct>...</DbtrAcct>
<DbtrAgt>...</DbtrAgt>
<CdtTrfTxInf>...</CdtTrfTxInf>
</PmtInf>
</CstmrCdtTrfInitn>
...
PInfId20180824a
扶轮基金会
...
2018-08-24
美国ABC公司
...
222222222
...
...
...
我有下面的XSL,是的,我知道XSL:template必须是顶级的,但希望能够解释我要做的事情。使用XSLT的最佳方法是什么?谢谢
在下面,XSL尝试将ID值从node/Document/cstmrcdttrfintin/PmtInf/Dbtr/ID/OrgId/Othr/ID移到header节点/Document/cstmrcdttrfintin/GrpHdr/InitgPty/ID/OrgId/Othr/ID。然后删除“cstmrcdttrfintinn/PmtInf/Dbtr/ID/OrgId/Othr/ID”下的整个节点
实现这一点的最佳方法是将标识模板与空模板结合使用:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<!-- Identity template -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<!-- Empty template that ignores the specified elements -->
<xsl:template match="CstmrCdtTrfInitn/PmtInf/Dbtr/Id"/>
</xsl:stylesheet>
其产出是:
<?xml version="1.0" encoding="UTF-8"?>
<CstmrCdtTrfInitn>
<GrpHdr>...</GrpHdr>
<PmtInf>
<PmtInfId>PInfId20180824a</PmtInfId>
<PmtMtd>TRF</PmtMtd>
<PmtTpInf>...</PmtTpInf>
<ReqdExctnDt>2018-08-24</ReqdExctnDt>
<Dbtr>
<Nm>ABC US Company</Nm>
<PstlAdr>...</PstlAdr>
</Dbtr>
<DbtrAcct>...</DbtrAcct>
<DbtrAgt>...</DbtrAgt>
<CdtTrfTxInf>...</CdtTrfTxInf>
</PmtInf>
</CstmrCdtTrfInitn>
...
PInfId20180824a
扶轮基金会
...
2018-08-24
美国ABC公司
...
...
...
...
要从输出中删除空行,请添加以下顶级元素:
<xsl:strip-space elements="*" />
<xsl:strip-space elements="*" />