Шаблон соответствия и документ - PullRequest
0 голосов
/ 05 января 2011

Могу ли я сделать что-то подобное для отображения значения узла?

<!-- plop.xml : -->
<?xml version="1.0"?>
<root>
      <node1>hello</node1>
</root>

<xsl:template name="my_template" match="document('plop.xml')/root" >
       <xsl:value-of select="node1"/>
</xsl:template>

 <xsl:call-template name="my_template"></xsl:call-template>

Я хочу создать специальный шаблон, который будет влиять только на один xml.
Я работаю на ASP.NET 2.0 C # XslCompiledTransform процессор.

Ответы [ 2 ]

1 голос
/ 05 января 2011

В XSLT / XPath 2.0 вы можете:

<xsl:template match="/root[document-uri(.) eq resolve-uri('plop.xml',.)]">
        <xsl:value-of select="node1"/>
</xsl:template> 
1 голос
/ 05 января 2011

Нет, ты не можешь так делать. (РЕДАКТИРОВАТЬ: по крайней мере, в XSLT 1.0, см. @ ответ Алехандро , как это сделать в XSLT 2.0.)

Узел XML не имеет понятия офайл, в котором он был сохранен, поскольку XML не обязательно соответствует фактическому файлу в первую очередь.Поэтому вы не можете написать шаблон, который соответствует только узлам в определенном файле.

Вы можете объявить параметр,

<xsl:param name="fileName" select="''" />

заполнить его из вашей программы на C # значением по вашему выборуи затем заставить программу XSLT вести себя по-разному в зависимости от значения этого параметра:

<xsl:template match="root">
  <xsl:choose>
    <xsl:when test="$fileName = 'plop.xml'">
      <!-- do something -->
    </xsl:when>
    <xsl:otherwise>
      <!-- do something else -->
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...