xml - 如何根据 xslt 的元素是否存在来选择值
问题描述
我正在为我们的银行集成设置一个 xslt 转换,我需要根据另一个元素是否存在来更改一个元素的值。
我可以使用以下默认值
<xsl:template match="wdt:Document/wdt:CstmrCdtTrfInitn/wdt:PmtInf/wdt:CdtTrfTxInf/wdt:RmtInf/wdt:Strd/wdt:RfrdDocInf/wdt:Tp/wdt:CdOrPrtry/wdt:Cd" priority="3">
<xsl:text>CINV</xsl:text>
</xsl:template>
当我尝试这个时:
<xsl:template match="wdt:Document/wdt:CstmrCdtTrfInitn/wdt:PmtInf/wdt:CdtTrfTxInf/wdt:RmtInf/wdt:Strd/wdt:RfrdDocInf/wdt:Tp/wdt:CdOrPrtry/wdt:Cd" priority="4">
<xsl:if test="*[local-name()='CdtNoteAmt']">
<xsl:value-of select="CREN"/>
</xsl:if>
</xsl:template>
我得到一个错误。
我的 xml 看起来像这样:
<RmtInf>
<Strd>
<RfrdDocInf>
<Tp>
<CdOrPrtry>
<Cd>SOAC</Cd>
</CdOrPrtry>
</Tp>
<Nb>CS82001LF</Nb>
<RltdDt>2019-08-20</RltdDt>
</RfrdDocInf>
<RfrdDocAmt>
<DuePyblAmt Ccy="USD">820.01</DuePyblAmt>
<RmtdAmt Ccy="USD">820.01</RmtdAmt>
</RfrdDocAmt>
<CdtrRefInf>
<Ref>CS82001LF</Ref>
</CdtrRefInf>
</Strd>
<Strd>
<RfrdDocInf>
<Tp>
<CdOrPrtry>
<Cd>SOAC</Cd>
</CdOrPrtry>
</Tp>
<Nb>CS-CrNote82001</Nb>
<RltdDt>2019-08-20</RltdDt>
</RfrdDocInf>
<RfrdDocAmt>
<CdtNoteAmt Ccy="USD">50</CdtNoteAmt>
</RfrdDocAmt>
<CdtrRefInf>
<Ref>CS-CrNote82001</Ref>
</CdtrRefInf>
</Strd>
</RmtInf>
我需要以下元素具有 CINV 或 CREN 值,具体取决于 CdtNoteAmt 元素是否存在:
<Tp>
<CdOrPrtry>
<Cd>CINV</Cd>
</CdOrPrtry>
</Tp>
解决方案
如果您想检查CdtNoteAmt
XML 中的任何位置是否存在,您可以这样做...
<xsl:if test="//*[local-name()='CdtNoteAmt']">
或者更好的是,因为您似乎在处理已知的名称空间,您可以这样做......
<xsl:if test="//wdt:CdtNoteAmt">
另一方面,如果要检查是否CdtNoteAmt
存在Strd
与当前Cd
元素所在的相同,请执行此操作...
<xsl:if test="ancestor::wdt:Strd//*[local-name()='CdtNoteAmt']">
或这个...
<xsl:if test="ancestor::wdt:Strd//wdt:CdtNoteAmt">
请注意,要按字面意思输出“CERN”,您需要这样做,否则您将尝试输出名为“CERN”的元素的内容
<xsl:value-of select="'CREN'"/>
或者这样做
<xsl:text>CERN</xsl:text>
推荐阅读
- cypress - 如何解决有关 Cypress 安装的问题?
- javascript - 创建对 RoR 控制器的 ajax 调用
- javascript - 如何反转从 Model.find({}) 返回的项目的顺序;
- django - Django views.py 逻辑未按要求发送电子邮件
- php - php变量中的html
- java - OOPS 中的类设计(JAVA)
- python - 为什么我会收到此错误?Pygame.error: 无法打开 block.jpg
- google-apps-script - 为什么谷歌电子表格中的数组交集没有按预期工作?
- css - css :last-child 不影响我的最后一个元素
- php - 在非类帮助文件中添加 Laravel 依赖项