#xslt
#xslt
Вопрос:
Мне нужна помощь в использовании xslt для извлечения значения строки из таблицы с использованием другого значения строки.
У меня есть таблица следующего вида:
Employee Manager
ABC PQR
ABC LMN
DEF XYZ
IJK XYZ
Сотрудник может принадлежать более чем одному отделу и иметь более чем одного менеджера.
и xml для таблицы является:
<List>
<Mapping>
<Employee>ABC</Employee>
<Manager>PQR</Manager>
</Mapping>
<Mapping>
<Employee>ABC</Employee>
<Manager>LMN</Manager>
</Mapping>
<Mapping>
<Employee>DEF</Employee>
<Manager>XYZ</Manager>
</Mapping>
...
</List>
Я получаю имя сотрудника из функции. Используя имя сотрудника в качестве входных данных в XSLT, как я должен найти имя менеджера сотрудника с помощью XSLT. Моим единственным выходным значением должно быть имя менеджера в виде списка или отдельного значения. Передача имени сотрудника «ABC» должна дать мне как «PQR», так и «LMN» в качестве значений менеджера.
Спасибо KSR81
Комментарии:
1. Можете ли вы показать желаемый вывод XML для этого примера ввода?
2. Похоже, ему нужен текстовый вывод, а не XML.
3. @Jim, @Larsh: Да, мне нужен текстовый вывод. Я получу имя emp из функции. string emp = getEmployeeName(); я должен передать emp в xslt и получить желаемое имя менеджера. как мне следует использовать xslt?
4. Будь то XML или текст, пожалуйста, покажите, какие именно выходные данные вы хотите. Например,
should give me both "PQR" and "LMN"
означает ли это, что вы хотите, чтобы они были заключены в кавычки? разделенные пробелами?5. Я не думаю, что XSLT будет более полезным, чем простое выражение XPath для вашего основного языка…
Ответ №1:
<xsl:param name="empName" />
<xsl:template match="/">
<xsl:for-each select="//Mapping[Employee = $empName]">
<xsl:value-of select="Manager"/>
<xsl:text> </xsl:text>
</xsl:for-each>
</xsl:template>
При этом будет выведено имя каждого менеджера для данного сотрудника, разделенное пробелом.
Чтобы сделать это более эффективно, вы, вероятно, захотите использовать ключи:
<xsl:param name="empName" />
<xsl:key name="mappingByEmployee" match="Mapping" use="Employee" />
<xsl:template match="/">
<xsl:for-each select="key('mappingByEmployee', $empName)">
<xsl:value-of select="Manager"/>
<xsl:text> </xsl:text>
</xsl:for-each>
</xsl:template>
Ответ №2:
<xsl:for-each select="Mapping">
<xsl:if test="Employee = "ABC"">
<xsl:value-of select="manager"/>
<xsl:if>
</xsl:for-each>
Подробнее читайте здесь, а как работать с параметрами здесь?
Комментарии:
1. спасибо alliswell. но имя сотрудника не всегда будет ABC. я получу имя сотрудника из функции. <p> Например: string emp = getEmpName(); <p> И я должен передать переменную emp в xslt и получить соответствующие значения manager.
2. Хорошо, чем вам нужно передать параметр XSLT, вы используете C #?