Puede utilizar el preceding
y following
XPath ejes para comprobar si no hay mayor valor:
XmlDocument doc = new XmlDocument();
doc.LoadXml("<documents>"
+ " <document><id>3</id></document>"
+ " <document><id>7</id></document>"
+ " <document><id>1</id></document>"
+ "</documents>");
var max = doc.SelectSingleNode(
"/documents/document[not(id < preceding::document/id)
and not(id < following::document/id)]");
Si hay varios valores máximos en el documento de identificación del código anterior devolverá el primero. Si desea que el último elemento con un ID máximo que se puede utilizar
var max = doc.SelectSingleNode(
"/documents/document[not(id < preceding::document/id)
and not(id <= following::document/id)]");
Si desea obtener una lista con todos los elementos que tienen un identificador máximo que puede utilizar el SelectNodes
método: Versión
var maxList = doc.SelectNodes(
"/documents/document[not(id < preceding::document/id)
and not(id < following::document/id)]");
XSLT :
<?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" indent="yes"/>
<xsl:template match="/">
<root>
<xsl:value-of
select="/documents/document/id[not(. <= preceding::document/id)
and not(. <= following::document/id)]"/>
</root>
</xsl:template>
</xsl:stylesheet>
+1 Para la expresión máxima de XPath 1.0 más corta y correcta, además de la complejidad cuadrática ... –
gracias, gran solución, ¡deberías obtener puntos de bonificación por esta! – Hinek
¡Solución inteligente! –