问题
i am trying to get max and min values of LandLine_ExtId base don the attribute action. the max value for Landline_ExtId with action value=del is returned wrong
xml input
<Landline_ExtId action='add'>771534777880</Landline_ExtId>
<Landline_ExtId action='add'>771534777881</Landline_ExtId>
<Landline_ExtId action='add'>771534777882</Landline_ExtId>
<Landline_ExtId action='add'>771534777883</Landline_ExtId>
<Landline_ExtId action='add'>771534777884</Landline_ExtId>
<Landline_ExtId action='add'>771534777885</Landline_ExtId>
<Landline_ExtId action='add'>771534777886</Landline_ExtId>
<Landline_ExtId action='add'>771534777887</Landline_ExtId>
<Landline_ExtId action='add'>771534777888</Landline_ExtId>
<Landline_ExtId action='add'>771534777889</Landline_ExtId>
<Landline_ExtId action='del'>551534882800</Landline_ExtId>
<Landline_ExtId action='del'>551534882801</Landline_ExtId>
<Landline_ExtId action='del'>551534882802</Landline_ExtId>
<Landline_ExtId action='del'>551534882803</Landline_ExtId>
<Landline_ExtId action='del'>551534882804</Landline_ExtId>
<Landline_ExtId action='del'>551534882805</Landline_ExtId>
<Landline_ExtId action='del'>551534882806</Landline_ExtId>
<Landline_ExtId action='del'>551534882807</Landline_ExtId>
<Landline_ExtId action='del'>551534882808</Landline_ExtId>
<Landline_ExtId action='del'>551534882809</Landline_ExtId>
XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:element name="getMaxOld">
<xsl:value-of select="/Data/Landline_ExtId[not(. < /Data/Landline_ExtId[@action='del'])][1]"/>
</xsl:element>
<xsl:element name="getMinOld">
<xsl:value-of select="/Data/Landline_ExtId[not(. > /Data/Landline_ExtId[@action='del'])][1]"/>
</xsl:element>
<xsl:element name="getMaxNew">
<xsl:value-of select="/Data/Landline_ExtId[not(. < /Data/Landline_ExtId[@action='add'])][1]"/>
</xsl:element>
<xsl:element name="getMinNew">
<xsl:value-of select="/Data/Landline_ExtId[not(. > /Da ta/Landline_ExtId[@action='add'])][1]"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
i am getting wrong value for GetMaxOld. Instead of 551534882809 , 771534777880 is being returned
回答1:
You are missing a predicate [@action='del']
in finding your minimum and maximum values, see next:
<?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"/>
<xsl:template match="/">
<data>
<getMaxOld>
<xsl:value-of select="/Data/Landline_ExtId[@action='del'][not(. < /Data/Landline_ExtId[@action='del'])][1]"/>
</getMaxOld>
<getMinOld>
<xsl:value-of select="/Data/Landline_ExtId[@action='del'][not(. > /Data/Landline_ExtId[@action='del'])][1]"/>
</getMinOld>
<getMaxNew>
<xsl:value-of select="/Data/Landline_ExtId[@action='add'][not(. < /Data/Landline_ExtId[@action='add'])][1]"/>
</getMaxNew>
<getMinNew>
<xsl:value-of select="/Data/Landline_ExtId[@action='add'][not(. > /Data/Landline_ExtId[@action='add'])][1]"/>
</getMinNew>
</data>
</xsl:template>
</xsl:stylesheet>
When applied on this XML:
<?xml version="1.0" encoding="UTF-8"?>
<Data>
<Landline_ExtId action='add'>771534777880</Landline_ExtId>
<Landline_ExtId action='add'>771534777881</Landline_ExtId>
<Landline_ExtId action='add'>771534777882</Landline_ExtId>
<Landline_ExtId action='add'>771534777883</Landline_ExtId>
<Landline_ExtId action='add'>771534777884</Landline_ExtId>
<Landline_ExtId action='add'>771534777885</Landline_ExtId>
<Landline_ExtId action='add'>771534777886</Landline_ExtId>
<Landline_ExtId action='add'>771534777887</Landline_ExtId>
<Landline_ExtId action='add'>771534777888</Landline_ExtId>
<Landline_ExtId action='add'>771534777889</Landline_ExtId>
<Landline_ExtId action='del'>551534882800</Landline_ExtId>
<Landline_ExtId action='del'>551534882801</Landline_ExtId>
<Landline_ExtId action='del'>551534882802</Landline_ExtId>
<Landline_ExtId action='del'>551534882803</Landline_ExtId>
<Landline_ExtId action='del'>551534882804</Landline_ExtId>
<Landline_ExtId action='del'>551534882805</Landline_ExtId>
<Landline_ExtId action='del'>551534882806</Landline_ExtId>
<Landline_ExtId action='del'>551534882807</Landline_ExtId>
<Landline_ExtId action='del'>551534882808</Landline_ExtId>
<Landline_ExtId action='del'>551534882809</Landline_ExtId>
</Data>
It gives you the next output:
<?xml version="1.0" encoding="UTF-8"?>
<data>
<getMaxOld>551534882809</getMaxOld>
<getMinOld>551534882800</getMinOld>
<getMaxNew>771534777889</getMaxNew>
<getMinNew>771534777880</getMinNew>
</data>
来源:https://stackoverflow.com/questions/19184044/get-max-value-of-a-node-not-working