xsl 转换器以获取最高值
Posted
技术标签:
【中文标题】xsl 转换器以获取最高值【英文标题】:xsl transformer to fetch highest value 【发布时间】:2021-11-20 14:10:37 【问题描述】:我有以下 XML 输入文件
<?xml version="1.0" encoding="UTF-8"?>
<ns3:oppgjor xmlns:ns3="http://NEXSTEP.Schemas.Kasseoppgjor" xmlns:ns2="http://NEXSTEP.Schemas.NexstepTypes">
<ROUTE_RECORD>
<ns2:SENDER Sender_code="BO_SERVER"/>
<ns2:RECEIPIENT Receipient_code="MASTER"/>
<ns2:MESSAGE_ID Type_name="Bonger" Version_number="1.0"/>
</ROUTE_RECORD>
<MESSAGE_RECORD>
<InsertChange>
<id>fb920f1d-3d14-4f45-b142-1e6df39bf17e</id>
<bruker>000821</bruker>
<kasseId>T10</kasseId>
<opprettetTidspunkt>2021-08-26T09:48:24.423+02:00</opprettetTidspunkt>
<startBeholdning>1500</startBeholdning>
<opptaltBeholdning>-4990</opptaltBeholdning>
<beregnetBeholdning>988</beregnetBeholdning>
<avdeling>0</avdeling>
<lager>STA</lager>
<bonger>
<bong>T10-54</bong>
<bong>T10-53</bong>
<bong>T10-49</bong>
<bong>T10-66</bong>
<bong>T10-17</bong>
<bong>T10-16</bong>
<bong>T10-15</bong>
<bong>T10-14</bong>
<bong>T10-13</bong>
<bong>T10-12</bong>
</bonger>
</InsertChange>
</MESSAGE_RECORD>
</ns3:oppgjor>
我的输出应该如下
<?xml version="1.0" encoding="UTF-8"?>
<CASH_REGISTER_REPORT>
<REFERENCE>66</REFERENCE>
</CASH_REGISTER_REPORT>
参考 66 应通过路径 MESSAGE_RECORD/InsertChange/bonger/bong 计算。这应该是“-”之后的值,并且应该取最高值。根据示例,它应该是 66。
T10-66 => 66
下面是我当前的 XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns3="http://NEXSTEP.Schemas.Kasseoppgjor" xmlns:ns2="http://NEXSTEP.Schemas.NexstepTypes" exclude-result-prefixes="ns2 ns3">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="*">
<xsl:element name="name()" namespace="namespace-uri()">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="/ns3:oppgjor">
<CASH_REGISTER_REPORT>
<REFERENCE></REFERENCE>
</CASH_REGISTER_REPORT>
</xsl:template>
</xsl:stylesheet>
有没有办法轻松地将 MESSAGE_RECORD/InsertChange/bonger/bong 中的最高值获取到 REFERENCE?
干杯
【问题讨论】:
您使用的是哪种 XSLT 处理器?使用一些扩展函数可能会更简单。 【参考方案1】:这是您可以查看的一种方式:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns3="http://NEXSTEP.Schemas.Kasseoppgjor"
exclude-result-prefixes="ns3">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/ns3:oppgjor">
<CASH_REGISTER_REPORT>
<xsl:for-each select="MESSAGE_RECORD/InsertChange/bonger/bong">
<xsl:sort select="substring-after(., '-')" data-type="number" order="descending"/>
<xsl:if test="position()=1">
<REFERENCE>
<xsl:value-of select="substring-after(., '-')"/>
</REFERENCE>
</xsl:if>
</xsl:for-each>
</CASH_REGISTER_REPORT>
</xsl:template>
</xsl:stylesheet>
【讨论】:
这非常有效。非常感谢@michael.hor257k以上是关于xsl 转换器以获取最高值的主要内容,如果未能解决你的问题,请参考以下文章
当输入 XML 和转换 XSL 是字符串时,如何使用 XslCompiledTransform。如何将转换结果作为字符串获取?
C# 中的 XSLT 转换 - 如何获取包含文档的有效 URL?