Передача входного XML в переменную в XSLT с именем элемента - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь отобразить входной XML в переменную, но он удаляет все имя тега, передавая только значение тега.

Входной XML

<Response>
    <FirstName>Manoj</FirstName>
    <LastName>Naik</LastName>
</Response>

XSLT

<xsl:stylesheet version="3.0"
              xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
exclude-result-prefixes="xsl in lang user f msxsl"
xmlns:in="http://www.composite.net/ns/transformation/input/1.0"
xmlns:lang="http://www.composite.net/ns/localization/1.0"
xmlns:f="http://www.composite.net/ns/function/1.0"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:user="urn:my-scripts">
    <msxsl:script language="C#" implements-prefix="user">
        <msxsl:assembly name="System.Data"/>
        <![CDATA[
    public string GetVaribaleData(string text)
        {

           return text;
        }   
    ]]>
    </msxsl:script>
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes" />
    <xsl:template match="/">
        <xsl:variable name="encdata">
            <xsl:copy-of select="." />
            <!--<xsl:copy-of select="node()"/>-->
      <!--<xsl:copy-of select="*" />-->
      <!-- <xsl:copy-of select="node()|@*" /> -->
        </xsl:variable>
        <xsl:variable name="json" select="user:GetVaribaleData($encdata)"/>
    </xsl:template>
</xsl:stylesheet>

С указанным выше кодом в выходной переменной возвращается \n\tManoj\n\tNaik\n

Ожидаемая информация в переменной encdata и параметр, присутствующий вФункция C # text, как показано ниже -

<Response>
    <FirstName>Manoj</FirstName>
    <LastName>Naik</LastName>
</Response>

Я хочу передать входной XML вместе с именем элемента в encdata, присутствующий в XSLT.Я хочу использовать эту переменную в коде C # для дальнейшей обработки того же.

Есть ли способ сделать то же самое?

1 Ответ

0 голосов
/ 27 сентября 2018

Это было слишком долго, чтобы писать в комментариях, но вам действительно нужно использовать функцию C #, которая свяжет ваш код с конкретным процессором?Возможно, вы можете добиться того же в чистом XSLT, используя именованный шаблон?

Например, попробуйте этот XSLT:

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:in="http://www.composite.net/ns/transformation/input/1.0"
    xmlns:lang="http://www.composite.net/ns/localization/1.0"
    xmlns:f="http://www.composite.net/ns/function/1.0"
    exclude-result-prefixes="in lang f">

    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes" />

    <xsl:template name="GetVariableData">
        <xsl:param name="node" />
        <xsl:param name="name" />
        <xsl:value-of select="$node/*[local-name() = $name]" />
    </xsl:template>

    <xsl:template match="/">
        <xsl:variable name="encdata" select="Response" />
        <xsl:call-template name="GetVariableData">
            <xsl:with-param name="node" select="$encdata" />
            <xsl:with-param name="name" select="'LastName'" />
        </xsl:call-template>
    </xsl:template>
</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...