2015-04-16 1 views
0

Я уверен, что должно быть что-то очевидное, я делаю неправильно. (Altova XMLSpy 2012 профессиональная sp1)XSLT- использование глобальной переменной в шаблоне

Я предрек и хотите использовать глобальную переменную:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" exclude-result-prefixes="xs fn"> 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="no" doctype-system="myDTD.dtd" /> 

    <!-- Edit these parameters if necessary. --> 
    <xsl:param name="outObject" select="POSIT"/> 

    <xsl:template match="section"> 
     <xsl:element name="section"> 
       <!-- debug --> 
      <xsl:element name="para">Debug: outObject = <xsl:value-of select="$outObject"/></xsl:element> 
     </xsl:element> 
    </xsl:template> 


</xsl:stylesheet> 

Это производит этот выход:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE section SYSTEM "myDTD.dtd"> 
<section> 
    <title/> 
    <para>Debug: outObject = </para> 
</section> 

Я бы подумал, что я мог бы получить доступ к значение $ outObject здесь. Что я неправильно понял?

ответ

1

Ваш параметр не заселен. Вы определяете его вне любого шаблона и, следовательно, из любого существующего контекста. Без дальнейшего контекста путь POSIT ничего не выбирает. Вы должны использовать что-то вроде:

<xsl:param name="outObject" select="/root/path/to/POSIT"/> 

Это предполагает, что POSIT является элементом в вашем входе XML, значение которого вы хотите получить - не строки"POSIT", которая должна быть указано:

<xsl:param name="outObject" select="`POSIT`"/> 
+0

Спасибо. Да, мне просто нужна строка. Благодарю. Хорошее объяснение различий. – rawtext

1

Возможно, вы сделали ту же ошибку, что и я всегда do.

Если вы хотите использовать строку «постулировать», вы должны использовать одиночные кавычки:

<xsl:param name="outObject" select="'POSIT'"/> 
+0

Да, спасибо, вот что я сделал. – rawtext