O XSL akıllıca numaralarını idare edebildi fark son zamanlarda şaşırdıXSLT Strings olarak Numaraları karşılaştırın
Arkaplan; karşılaştırmaları yaparken sayısal olarak metin olarak sayıları tedavi etmeyi bilmek (yani, '10' < '7'
düşüncesinden ziyade 7 < 10
olduğunu anlamış). Benim durumumda istediğim buydu; Beklediğim gibi değil. Meraktan
Sonra ama hiçbir şans ile (string()
işlevini kullanarak yani dizeleri olarak sayıları karşılaştırmak XSLT'yi zorlamaya çalıştı.
Soru
o XSLT'yi almak mümkün mü dizeleri olarak sayıları karşılaştırmak; örneğin bu yüzden '10' < '7'
Örnek
Sou? rce XML:
<?xml version="1.0" encoding="utf-8"?>
<element>
<x>1</x>
<x>2</x>
<x>3</x>
<x>4</x>
<x>5</x>
<x>6</x>
<x>7</x>
<x>8</x>
<x>9</x>
<x>10</x>
</element>
XSLT:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output indent="yes"/>
<xsl:template match="element">
<element>
<AsItComes>
<xsl:for-each select="./x">
<xsl:if test="./text() < 7">
<xsl:copy-of select="."></xsl:copy-of>
</xsl:if>
</xsl:for-each>
</AsItComes>
<AsNumber>
<xsl:for-each select="./x">
<xsl:if test="number(./text()) < 7">
<xsl:copy-of select="."></xsl:copy-of>
</xsl:if>
</xsl:for-each>
</AsNumber>
<AsString>
<xsl:for-each select="./x">
<xsl:if test="string(./text()) < '7'">
<xsl:copy-of select="."></xsl:copy-of>
</xsl:if>
</xsl:for-each>
</AsString>
</element>
</xsl:template>
</xsl:stylesheet>
Beklenen Çıktı:
<?xml version="1.0" encoding="utf-8"?>
<element>
<AsItComes>
<x>1</x>
<x>2</x>
<x>3</x>
<x>4</x>
<x>5</x>
<x>6</x>
<x>10</x>
</AsItComes>
<AsNumber>
<x>1</x>
<x>2</x>
<x>3</x>
<x>4</x>
<x>5</x>
<x>6</x>
</AsNumber>
<AsString>
<x>1</x>
<x>2</x>
<x>3</x>
<x>4</x>
<x>5</x>
<x>6</x>
<x>10</x>
</AsString>
</element>
Gerçek Çıktı:
<?xml version="1.0" encoding="utf-8"?>
<element>
<AsItComes>
<x>1</x>
<x>2</x>
<x>3</x>
<x>4</x>
<x>5</x>
<x>6</x>
</AsItComes>
<AsNumber>
<x>1</x>
<x>2</x>
<x>3</x>
<x>4</x>
<x>5</x>
<x>6</x>
</AsNumber>
<AsString>
<x>1</x>
<x>2</x>
<x>3</x>
<x>4</x>
<x>5</x>
<x>6</x>
</AsString>
</element>
Analize katılıyorum, fakat XSLT 2.0 için '' '' '' = '= '' 2.0 '' stil sayfası ile kullanmak yeterlidir. 'İnsanların xs: string' constructor çağrılarına bir şey sarmaları gerektiğini düşündüklerinden korkuyorum. –