根据 XSLT 中的特定节点值获取节点
Posted
技术标签:
【中文标题】根据 XSLT 中的特定节点值获取节点【英文标题】:Getting Nodes as per particular node value in XSLT 【发布时间】:2021-08-24 12:09:01 【问题描述】:我是 XSLT 的新手。我有以下 XML,我想获取 <fs>HD</fs>
所在的节点
我的原始 XML 是
<rfs>
<rf id="1111">
<FO>Al</FO>
<recs>
<rec id="1111_1">
<t>N</t>
<cf>AS</cf>
<ref>S123</ref>
<fs>APCT</fs>
</rec>
<rec id="1111_2">
<t>N</t>
<cf>AS</cf>
<ref>S1231</ref>
<fs>HD</fs>
</rec>
<rec id="1111_3">
<t>N</t>
<cf>AS</cf>
<ref>S1232</ref>
<fs>HD</fs>
</rec>
</recs>
<Ag>XYZ</Ag>
</rf>
<rf id="2222">
<FO>Sd</FO>
<recs>
<rec id="2222_1">
<t>N</t>
<cf>AS</cf>
<ref>S123</ref>
<fs>APCT</fs>
</rec>
<rec id="2222_2">
<t>N</t>
<cf>AS</cf>
<ref>S1231</ref>
<fs>APCT</fs>
</rec>
<rec id="2222_3">
<t>N</t>
<cf>AS</cf>
<ref>S1232</ref>
<fs>APCT</fs>
</rec>
</recs>
<Ag>acv</Ag>
</rf>
</rfs>
我需要使用<fs>HD</fs>
获取所有节点
所以我的输出应该是 -
<rfs>
<rf id="1111">
<FO>Al</FO>
<recs>
<rec id="1111_2">
<t>N</t>
<cf>AS</cf>
<ref>S1231</ref>
<fs>HD</fs>
</rec>
<rec id="1111_3">
<t>N</t>
<cf>AS</cf>
<ref>S1232</ref>
<fs>HD</fs>
</rec>
</recs>
<Ag>XYZ</Ag>
</rf>
</rfs>
任何帮助将不胜感激。谢谢!
【问题讨论】:
好吧,你应该向我们展示你的尝试以及它是如何失败的。而且我不确定样本是否是精确的规范,您如何确定要复制哪些元素,哪些不复制?您想要的输出中的<FO>Al</FO>
或<Ag>XYZ</Ag>
没有那个后代<fs>HS</fs>
。
【参考方案1】:
您可以尝试以下模板:
<xsl:template match="text()" />
<xsl:template match="/rfs | rf[recs/rec/fs='HD']" >
<xsl:copy>
<xsl:copy-of select="FO | @* | text()" />
<xsl:apply-templates select="node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="rec[fs='HD']">
<xsl:copy>
<xsl:copy-of select="."/>
</xsl:copy>
</xsl:template>
它们既不完整也不完美。但它们可能是您努力的一个很好的起点。
【讨论】:
以上是关于根据 XSLT 中的特定节点值获取节点的主要内容,如果未能解决你的问题,请参考以下文章
使用xslt和c#从中选择一个xml节点并根据其值添加更多节点[重复]