xml - XSLT 在 foreach 循环中通过索引获取节点值
问题描述
我在这里有一个 xml 文件:
<TestBlock number="534" result="ok" text="READDTC_POSTDVT">
<TestStep datatype="A" result="ok" text="Open Link">
<StringResult format="ascii" value="BSM" />
</TestStep>
<TestStep datatype="A" result="ok" text="BCM DTC Read">
<StringResult format="ascii" value="REQ" />
</TestStep>
</TestBlock>
<TestBlock number="511" result="ok" text="READDTC_POSTDVT">
<TestStep datatype="A" result="nok" text="Open Link">
<StringResult format="ascii" value="CCU" />
</TestStep>
<TestStep datatype="A" result="nok" text="BCM DTC Read">
<StringResult format="ascii" value="REQ" />
</TestStep>
</TestBlock>
我期望的结果是
在我只想获得第一个 StringResult@value 的每个 TestBlock 中(例如:BSM、CCU)应该是:
<OP_VAL KEY="BSM" VALUE="okBSM"/>
<OP_VAL KEY="BSM" VALUE="okREQ"/>
<OP_VAL KEY="CCU" VALUE="nokCCU"/>
<OP_VAL KEY="CCU" VALUE="nokREQ"/>
我的 xslt 但它不起作用:
<xsl:for-each select="/Telegram/Body/Data/ResultData/TestResult/TestBlock">
<xsl:for-each select="TestStep">
<xsl:element name="OP_VAL">
<xsl:attribute name="KEY">
<xsl:value-of select="/Telegram/Body/Data/ResultData/TestResult/TestBlock[1]/StringResult/@value"/>
</xsl:attribute>
</xsl:attribute>
<xsl:attribute name="VALUE">
<xsl:value-of select="concat(@result,StringResult/@value)"/>
</xsl:attribute>
</xsl:element>
</xsl:for-each>
</xsl:for-each>
解决方案
任何for-each
更改上下文节点,您可能想要选择../TestBlock[1]/StringResult/@value
而不是/Telegram/Body/Data/ResultData/TestResult/TestBlock[1]/StringResult/@value
.
另请注意,xsl:element
仅需要在运行时计算元素名称或命名空间,否则使用文字结果元素,例如<OP_VAL KEY="{../TestBlock[1]/StringResult/@value}" VALUE="{@result}{StringResult/@value}"/>
推荐阅读
- bash - 如何自动打开许多文件到 zsh 或 bash 上的给定行
- java - 用户单击 autoCompleteEditText 时清除 drawableLeft(非背景)
- javascript - 如何使用 LitElement 将道具从父母发送给孩子
- c# - 是否可以根据枚举输入返回泛型类?
- excel - VBA Xmatch 函数返回运行时错误 1004
- ios - ViewController 的标题意外消失
- r - 森林图,对多个变量进行排序和汇总
- google-bigquery - 将旧日志从 Stackdriver 导出到 Bigquery
- python - 使用 Python 对列中的多个值进行复杂的提取和转换
- javascript - Leaflet-React:L 未定义