get max value of a node not working

雨燕双飞 提交于 2019-12-11 20:24:00

问题


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(. &lt;      /Data/Landline_ExtId[@action='del'])][1]"/>
      </xsl:element>
     <xsl:element name="getMinOld">
    <xsl:value-of select="/Data/Landline_ExtId[not(. &gt; /Data/Landline_ExtId[@action='del'])][1]"/>
       </xsl:element>
           <xsl:element name="getMaxNew">
         <xsl:value-of select="/Data/Landline_ExtId[not(. &lt; /Data/Landline_ExtId[@action='add'])][1]"/>
       </xsl:element>
       <xsl:element name="getMinNew">
    <xsl:value-of select="/Data/Landline_ExtId[not(. &gt; /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(. &lt; /Data/Landline_ExtId[@action='del'])][1]"/>
            </getMaxOld>
            <getMinOld>
                <xsl:value-of select="/Data/Landline_ExtId[@action='del'][not(. &gt; /Data/Landline_ExtId[@action='del'])][1]"/>
            </getMinOld>
            <getMaxNew>
                <xsl:value-of select="/Data/Landline_ExtId[@action='add'][not(. &lt; /Data/Landline_ExtId[@action='add'])][1]"/>
            </getMaxNew>
            <getMinNew>
                <xsl:value-of select="/Data/Landline_ExtId[@action='add'][not(. &gt; /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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!