Вам нужно объявить пространство имен в XSLT и использовать его в выражениях XPath. Например ::
<xsl:stylesheet ... xmlns:my="http://www.mysite.com">
<xsl:template match="/my:MyRoot"> ... </xsl:template>
</xsl:stylesheet>
Обратите внимание, что вы должны предоставить некоторый префикс, если вы хотите ссылаться на элементы из этого пространства имен в XPath. Хотя вы можете просто сделать xmlns="..."
без префикса, и он будет работать для литеральных элементов результата, он не будет работать для XPath - в XPath, неподписанное имя всегда считается в пространстве имен с пустым URI, независимо от xmlns="..."
в области.
Необходимо включить присваиваемые типизированные константы. Проект-> Опции-> Компилятор-> Присваиваемые типизированные константы
Также можно добавить {$J+}
или {$WRITEABLECONST ON}
в файл первенства, который, вероятно, лучше, так как это будет работать даже при перемещении файла в другой проект.
Как сказал Барри, люди воспользовались преимуществами; Один из способов, которым это было использовано, был для отслеживания единичных случаев. Если вы посмотрите на классическую реализацию синглтона, вы увидите это:
// Example implementation of the Singleton pattern.
TSingleton = class(TObject)
protected
constructor CreateInstance; virtual;
class function AccessInstance(Request: Integer): TSingleton;
public
constructor Create; virtual;
destructor Destroy; override;
class function Instance: TSingleton;
class procedure ReleaseInstance;
end;
constructor TSingleton.Create;
begin
inherited Create;
raise Exception.CreateFmt('Access class %s through Instance only', [ClassName]);
end;
constructor TSingleton.CreateInstance;
begin
inherited Create;
// Do whatever you would normally place in Create, here.
end;
destructor TSingleton.Destroy;
begin
// Do normal destruction here
if AccessInstance(0) = Self then
AccessInstance(2);
inherited Destroy;
end;
{$WRITEABLECONST ON}
class function TSingleton.AccessInstance(Request: Integer): TSingleton;
const
FInstance: TSingleton = nil;
begin
case Request of
0 : ;
1 : if not Assigned(FInstance) then
FInstance := CreateInstance;
2 : FInstance := nil;
else
raise Exception.CreateFmt('Illegal request %d in AccessInstance', [Request]);
end;
Result := FInstance;
end;
{$IFNDEF WRITEABLECONST_ON}
{$WRITEABLECONST OFF}
{$ENDIF}
class function TSingleton.Instance: TSingleton;
begin
Result := AccessInstance(1);
end;
class procedure TSingleton.ReleaseInstance;
begin
AccessInstance(0).Free;
end;
Выведенные по типу константы могут быть только скалярными значениями, то есть такими вещами, как целые числа, числа с двойными числами и т. Д. Для этих типов констант компилятор действительно заменяет символ константы значением константы всякий раз, когда он встречает их в выражениях.
Типизированные константы, с другой стороны, могут быть структурированными значениями - массивами и записями. Этим ребятам нужно фактическое хранилище в исполняемом файле, то есть им нужно выделить для них хранилище, чтобы при загрузке ОС ОС значение типизированной константы физически находилось в некотором месте в памяти.
Чтобы объяснить, почему, исторически, типизированные константы в раннем Delphi и его предшественнике, Turbo Pascal, доступны для записи (и, таким образом, по сути инициализировали глобальные переменные), нам нужно вернуться к временам DOS.
DOS работает в реальном режиме в терминах x86. Это означает, что программы имеют прямой доступ к физической памяти без какого-либо MMU , выполняющего виртуально-физические отображения. Когда программы имеют прямой доступ к памяти, защита памяти не действует. Другими словами, если по какому-либо адресу есть память, она доступна как для чтения, так и для записи в реальном режиме.
Таким образом, в программе Turbo Pascal для DOS с типизированной константой, значение которой распределяется по адресу в памяти во время выполнения, эта типизированная константа будет доступна для записи. Нет никакого аппаратного MMU, мешающего и мешающего программе записать в него. Точно так же, поскольку Паскаль не имеет понятия «константности», которое есть в C ++, в системе типов нет ничего, что могло бы вас остановить. Многие люди воспользовались этим, поскольку Turbo Pascal и Delphi в то время еще не инициализировали глобальные переменные как функцию.
Переходя к Windows, существует слой между адресами памяти и физическими адресами: блок управления памятью. Этот чип берет индекс страницы (сдвинутую маску) адреса памяти, к которому вы пытаетесь обратиться, и ищет атрибуты этой страницы в своей таблице страниц . Эти атрибуты включают в себя читаемые, записываемые и для современных чипов x86 неисполняемые флаги. Благодаря этой поддержке можно помечать разделы .EXE или .DLL такими атрибутами, чтобы при загрузке Windows загрузчик выполнил образ в память, он назначал соответствующие атрибуты страниц для страниц памяти, которые отображаются на страницы дисков в этих разделах.
Когда появилась 32-битная версия компилятора Delphi для Windows, имело смысл сделать const-подобные вещи действительно const, поскольку ОС также имеет эту функцию.
, Почему: Поскольку в предыдущих версиях Дельфи типизированные константы были присваиваемыми по умолчанию для сохранения совместимости с более старыми версиями, где они были всегда перезаписываемы (Дельфи 1 до раннего Паскаля).
значение по умолчанию было теперь изменено для создания констант действительно constant†¦
переключатель Компилятора: {$J +} или {$J-} {$WRITEABLECONST НА} или {$WRITEABLECONST ПРОЧЬ}
Или в опциях проекта для компилятора: проверьте присваиваемые типизированные константы