Я пишу таблицу стилей, чтобы создать отчет, по которому текстовые строки в файле больше, чем разрешено. (Насколько известно, это невозможно сделать с помощью схемы 1.0.)Использование длины строки, указанной в элементе для проверки другого элемента
Для каждого текста я проверяю, что длина строки, содержащейся в элементе Value, не превышает того, что указано в элементе Info для этого конкретный текст.
Однако я обнаружил, что моя переменная maxLength не может использоваться как глобальная переменная. Поэтому, хотя я могу получить информацию о максимальных длинах, я не могу использовать эти значения в своих проверках. Я мог бы посоветовать, как лучше перепроектировать мою таблицу стилей.
Мой XSL:
<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<!-- Message template -->
<xsl:template match="Text" >
<xsl:variable name="messageNumber" select="@Id"/>
<xsl:variable name="maxLength"/>
<xsl:choose>
<xsl:when test="(normalize-space(Info)='')">
<xsl:variable name="maxLength" select="40" />
Message <xsl:value-of select="$messageNumber"/> is missing Max Length. Using <xsl:value-of select="$maxLength"/>
</xsl:when>
<xsl:when test="contains(Info,'char')">
<xsl:variable name="maxLength1" select="substring-before(Info, 'char')"/>
<xsl:variable name="maxLength" select="substring($maxLength1, string-length($maxLength1) - 2)" />
</xsl:when>
<xsl:otherwise></xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="string-length(Value) > $maxLength">
Message <xsl:value-of select="$messageNumber"/> too long: <xsl:value-of select="string-length(Value)"/> chars (max is <xsl:value-of select="$maxLength"/>)
</xsl:when>
<xsl:otherwise>
Message <xsl:value-of select="$messageNumber"/> is OK: <xsl:value-of select="string-length(Value)"/> chars (max is <xsl:value-of select="$maxLength"/>)
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
Мой XML:
<?xml version="1.0" ?>
<Texts>
<Text Id="1">
<Value>OK</Value>
<Info>Text length for button, max 6 chars</Info>
</Text>
<Text Id="2">
<Value>Cancel</Value>
<Info>Button, Maximum length 9 chars</Info>
</Text>
<Text Id="3">
<Value>Continue</Value>
<Info>This text cannot be longer than 14 characters. Use short form if required.</Info>
</Text>
<Text Id="4">
<Value>Twinkle, twinkle little star</Value>
<Info>Title text, Maximum length 14 chars.</Info>
</Text>
<Text Id="5">
<Value>Twinkle, twinkle little star again</Value>
<Info></Info>
</Text>
</Texts>
Нужный выход что-то вроде этого:
Message 1 is OK: 2 chars (max is 6)
Message 2 is OK: 6 chars (max is 9)
Message 3 is OK: 8 chars (max is 14)
Message 4 too long: 28 chars (max is 14)
Message 5 is missing Max Length. Using 40
Message 5 is OK: 34 chars (max is 40)