Как я могу отправить узел (кто-либо) в xsl:function?

LDAP является стандартом, AD является (собственной) реализацией Microsoft (и больше). Википедия имеет хорошую статью, которая копается в специфических особенностях. Я нашел этот документ с очень подробной оценкой AD с точки зрения LDAP.

6
задан Laxmikanth Samudrala 31 August 2009 в 00:24
поделиться

5 ответов

Думаю, ответ на ваш вопрос - да. Вы можете отправить узел в функцию XSLT.

Если вам интересно, что использовать для значения атрибута as = "", у вас есть несколько вариантов. Если вы хотите быть очень небрежным и принимать что угодно, используйте as = "item () *" .

С сайта Дэвида Поусона :

item () * .. тип набора узлов? W3C

Да, я согласен, выглядит красиво бессмысленно, не так ли. Однако. По состоянию на CR, это очень важно, особенно если вы хотите использовать типы. И хочу создать, скажем, набор узлов ... извините последовательность в переменной.

<xsl:variable name="a"
 select="(//h3)[position() < 3]"
 as="item()*"/>

Это создает переменную, которую можно взломать в использование xpath довольно легко. Т.е. запомните item () *.

типы ... несколько примеров. W3C

Из пояснительного электронного письма от Майка. Кей, спасибо, Майк. Примеры:

значением параметра может быть любой элемент (т.е. узел или атомарное значение). Но это должен быть одним элементом.

параметр может быть одним элементом или пустая последовательность

параметр должен быть последовательностью один или несколько элементов - пустая последовательность не допускается

параметр может быть любой последовательностью ноль или более элементов - здесь нет места ограничения на его значение.

параметр может быть любой последовательностью ноль или более узлов

параметр может быть любой последовательностью ноль или более атомарных значений (например, целые числа, строки или логические значения).

item () * - наиболее общий тип возможно, соответствует всему, например «Объект» в Java. По этой причине обычно может быть опущено. Но нет всегда, например тип по умолчанию в xsl: переменная не является item () *, но document-node (), чтобы убедиться, что

thing

продолжает вести себя как XSLT 1.0

Используйте эти указать параметры, типы переменных и т. д.

8
ответ дан 17 December 2019 в 02:31
поделиться

XSL не заботится о параметре. Он действительно обрабатывает все как XML. Если текст передан, он рассматривается как текстовый узел.

Вот пример со ссылкой для дальнейшего использования.

http://www.w3schools.com/xsl/

<xsl:call-template name="TemplateName">
    <xsl:with-param name="ParamName" select="MyNode/MyNode" />
</xsl:call-template>

<xsl:template name="TemplateName">
    <xsl:param name="ParamName" />
</xsl:template>
0
ответ дан 17 December 2019 в 02:31
поделиться

Существует множество функций XSLT, которые принимают узлы в качестве параметров. Например, все аргументы concat могут быть узлами, например:

concat(myelement, myelement/@myattribute)

Хотя это в точности отвечает на заданный вами вопрос, я готов поспорить, сбрасывая деньги, что это не тот вопрос, на который вы хотели ответить. Но, черт возьми, вы спрашивали об этом четыре раза, так что вперед.

Править

На самом деле атрибуты не являются узлами; узлами являются только элементы, текст, комментарии, инструкции по обработке и разделы CDATA. Но приведенный выше пример по-прежнему правильно отвечает на вопрос.

0
ответ дан 17 December 2019 в 02:31
поделиться

В вашем вопросе:

Могу ли я отправить <книгу> элемент в функцию - внутри этой функции я хочу обрабатывать узлы в разделе book (, or )

and later comment:

can i have a function which accepts the node as a parameter?

...you're asking for a function, but what i think you want is a template for the book element.

Of course, you could do this several ways--in a for-each loop, actually sending the book node into a template using with-param, etc.--but a simple template should accomplish what you need. Whatever the template matches is the "parameter".

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="books">
  <xsl:apply-templates select="book"/>
</xsl:template>

<xsl:template match="book">
    author: <xsl:value-of select="author" />
    price: <xsl:value-of select="price" />
    year: <xsl:value-of select="year" />
</xsl:template>

</xsl:stylesheet>

If you want to do some further processing on the sub-elements (author, price, and year), you could look into creating templates for them too. Keep in mind that matching "year" will match all year elements, even for those you might have in date of births etc. (In these cases you would probably want to restrict the XPath in the match or just keep the book/year processing within the book template.) Say you want to do something extra with year. Your book processing might evolve into something like this (where you're now passing each year node as parameters into the year template):

<xsl:template match="book">
    author: <xsl:value-of select="author" />
    price: <xsl:value-of select="price" />
    <xsl:apply-templates select="year" />
</xsl:template>

<xsl:template match="year">
   <xsl:choose>
      <xsl:when test="year &lt; '2000'">
         from a prior century: <xsl:value-of select="." />
      </xsl:when>
      <xsl:otherwise>
         from this century: <xsl:value-of select="." />
      </xsl:otherwise>
   </xsl:choose>
</xsl:template>
-1
ответ дан 17 December 2019 в 02:31
поделиться

Чтобы добавить к ответу ChaosPandion , вам может потребоваться добавить тест узла к вашему запросу XPath:

<xsl:call-template name="TemplateName">
    <xsl:with-param name="ParamName" select="MyNode/MyNode/node()" />
</xsl:call-template>

<xsl:template name="TemplateName">
    <xsl:param name="ParamName" />
</xsl:template>

Официально node () не является функция это тест, но может возвращать значение, подобное свойству XmlNode.InnerXml .

-1
ответ дан 17 December 2019 в 02:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: