Когда вы делаете переменную с тем же именем в подклассе, это называется скрытием. В результате подкласс теперь будет иметь оба свойства. Вы можете получить доступ к одному из суперкласса с помощью super.var
или ((SuperClass)this).var
. Переменные не обязательно должны быть одного типа; это всего лишь две переменные, разделяющие имя, подобно двум перегруженным методам.
Это происходит из-за встроенных шаблонов в XSLT. XSLT имеет несколько созданные в шаблонах, которые говорят:
- при применении шаблонов к элементу обработайте его дочерние элементы
- , когда Вы применяете шаблоны к текстовому узлу, даете его значение
Вместе, это означает, что, если Вы применяете шаблоны к элементу, но не имеете явного шаблона для того элемента, тогда его содержание обрабатывается, и в конечном счете Вы заканчиваете с текстом, который содержит элемент.
Read полное объяснение здесь: http://www.dpawson.co.uk/xsl/sect2/defaultrule.html
можно переопределить шаблоны по умолчанию для текстовых узлов путем определения собственного шаблона и иметь его, ничего не делают.
<xsl:template match="text()" />
Это - вероятно, самая частая проблема, даже испытал опыт программистов XSLT.
наблюдаемое поведение состоит точно в том, как XSLT-совместимый процессор shoud ведет себя.
Принимают во внимание что:
<xsl:apply-templates/>
сокращение для:
<xsl:apply-templates select="child::node()"/>
и существование встроенные шаблонные правила . Согласно спецификация .:
XSLT 1.0" 5.8 Встроенных Шаблонных Правил
существует встроенное шаблонное правило позволить рекурсивной обработке продолжаться в отсутствие успешного соответствия шаблона по явному шаблонному правилу в таблице стилей. Это шаблонное правило относится и к узлам элемента и к корневому узлу. Следующие шоу эквивалент встроенного шаблонного правила:
<xsl:template match="*|/"> <xsl:apply-templates/> </xsl:template>
существует также встроенное шаблонное правило для каждого режима, который позволяет рекурсивной обработке продолжаться в том же режиме в отсутствие успешного соответствия шаблона по явному шаблонному правилу в таблице стилей. Это шаблонное правило относится и к узлам элемента и к корневому узлу. Следующие шоу эквивалент встроенного шаблона управляют для режима m.
<xsl:template match="*|/" mode="m"> <xsl:apply-templates mode="m"/> </xsl:template>
существует также встроенное шаблонное правило для текста и узлов атрибута что текст копий через:
<xsl:template match="text()|@*"> <xsl:value-of select="."/> </xsl:template>
встроенное шаблонное правило для обработки инструкций и комментариев ничего не состоит в том, чтобы сделать.
<xsl:template match="processing-instruction()|comment()"/>
встроенное шаблонное правило для узлов пространства имен ничего не состоит в том, чтобы также сделать. Нет никакого шаблона, который может соответствовать узлу пространства имен; таким образом встроенное шаблонное правило является единственным шаблонным правилом, которое применяется для узлов пространства имен.
встроенные шаблонные правила рассматривают, как будто они были импортированы неявно перед таблицей стилей и так имеют более низкий приоритет импорта , чем все другие шаблонные правила. Таким образом, автор может переопределить встроенное шаблонное правило включением явного шаблонного правила"
---Конец---
кавычки Спецификации XSLT Так, если автор хочет полностью управлять обработкой XSLT, они должны переопределить все встроенные шаблоны .
, Например, если мы не хотим text()
узлы быть скопированными в вывод, мы можем заставить их быть проигнорированными путем переопределения встроенного шаблона следующим образом:
<xsl:template match="text()" />
Вы могли установить режим для применения только собственных шаблонов:
<xsl:template match="* | /" >
<xsl:apply-templates mode="myMode" />
</xsl:template>
<xsl:template match="somenode" mode="myMode">
<!-- do something here -->
</xsl:template>
Другая опция состояла бы в том, чтобы перезаписать встроенные шаблонные правила (см., например, http://unix.com.ua/orelly/xml/xmlnut/ch08_07.htm )