Могу ли я вставить одну переменную в другую переменную в Xsl? - PullRequest
0 голосов
/ 16 июля 2010
<xsl:variable name="id">
  <idNum>0607V45621014F</idNum>
</xsl:variable> 

<xsl:variable name="pathId" select="Orders/Order[ORD_Num='$id/idNum']"/>

.... не выбирайте idNum

другой .. не ..

<xsl:variable name="XmlFile" select="YG.xml"/>
<xsl:value-of select="document($XmlFile)/aziende/azienda/ragione_sociale"/>

или другой ... не ..

<xsl:variable name="tagName" select="aziende"/>
<xsl:value-of select="document($XmlFile)/$tagName/azienda/ragione_sociale"/>

1 Ответ

3 голосов
/ 16 июля 2010

1)

<xsl:variable name="pathId" select="Orders/Order[ORD_Num='$id/idNum']"/> 

Вы говорите: элемент Order, у которого есть хотя бы один дочерний элемент ORD_Num со строковым значением, равным '$id/idNum'.

Заменить на:

<xsl:variable name="pathId" select="Orders/Order[ORD_Num=$id]"/> 

Поскольку строковое значение переменной $ id (как вы определите фрагмент дерева результатов) равно 0607V45621014F.

Примечание : было бы лучше, есливы определяете $ id как строку типа select="'0607V45621014F'".Кроме того, вы не можете (в XSLT 1.0) делать: [ORD_Num=$id/idNum], потому что оператор / нельзя применить к RTF.

2)

<xsl:variable name="XmlFile" select="YG.xml"/>   
<xsl:value-of select="document($XmlFile)/aziende/azienda/ragione_sociale"/> 

Здесь выговорят: пусть будет $ XmlFile набор узлов со всеми YG.xml элементами, дочерними по отношению к контекстному узлу и т. д.

Заменить (если вы хотите документ с относительным uri YG.xml)

<xsl:variable name="XmlFile" select="'YG.xml'"/>   

Примечание: это не вызывает ошибки, потому что document() очень универсален (это те немногие, которые принимают object в качестве параметра)

3)

<xsl:variable name="tagName" select="aziende"/>                             
<xsl:value-of select="document($XmlFile)/$tagName/azienda/ragione_sociale"/>

Это делаетне работает, потому что правильное выражение / должно быть путем (В XSLT 2.0 также может быть функция).

Заменить на:

<xsl:variable name="tagName" select="document($XmlFile)/aziende"/>                             
<xsl:value-of select="$tagName/azienda/ragione_sociale"/>

Или

<xsl:variable name="tagName" select="'aziende'"/>                             
<xsl:value-of select="document($XmlFile)/*[name()=$tagName]/azienda/ragione_sociale"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...