Как я могу изменить XSLT на использование Dynami c XPath с использованием C#? - PullRequest
0 голосов
/ 31 марта 2020

Я использую Asp. net, чтобы сделать преобразование в XML с использованием XSLT с помощью кода C# следующим образом.

    protected void Page_Load(object sender, EventArgs e)
    {
        string strXSLTFile = Server.MapPath("EmployeeXSLT.xslt");
        string strXMLFile = Server.MapPath("Employess.xml");

        XmlReader reader = XmlReader.Create(strXMLFile);

        XslCompiledTransform objXSLTransform = new XslCompiledTransform();
        objXSLTransform.Load(strXSLTFile);
        StringBuilder htmlOutput = new StringBuilder();
        TextWriter htmlWriter = new StringWriter(htmlOutput);
        objXSLTransform.Transform(reader, null, htmlWriter);
        ltRss.Text = htmlOutput.ToString();
        reader.Close();
    }

и для полного примера с (Asp. net, XSLT и XML) перейдите по этой ссылке Выполнение XSLT-преобразования в ASP. Net

Теперь мне нужно изменить значение Xpath файла XSLT. Я провожу поиск, чтобы узнать, как это сделать. наконец, я нашел, что концепции буксировки влияют на файл XSLT. Тем не менее, не приведены примеры того, как применять эти концепции для изменения XSLT «совпадения» или «для каждого выбора», где мне нужно добавить переменную для изменяемого Xpath.

первый: использование так называемых Dynami c оценка XPath

второй: использование так называемых XSLT-параметров

Мне нужно знать, как я могу изменить "соответствие" XSLT, используя код C#, чтобы соответствовать определенному выбору c.

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

Было бы полезно, если бы вы объяснили проблему, которую вы пытаетесь решить, а не метод, который вы хотите использовать для ее решения.

Таблица стилей XSLT представляет собой документ XML, поэтому вы всегда можете преобразовать с использованием XSLT (с так называемой «таблицей мета-стилей»).

В XSLT 3.0 (недоступно у Microsoft, но доступно для C# пользователей через библиотеку Saxon) вы можете параметризовать таблицу стилей с помощью " «Атрибуты тени», например

<xsl:template _match="{$pattern}"/>

, где $ pattern - это параметр таблицы стилей, объявленный как

<xsl:param name="pattern" static="yes"/>

, так что вызывающее приложение может предоставить значение.

Конечно, вы также можете использовать обычные (во время выполнения) параметры в шаблоне соответствия вида

<xsl:template match="*[@id=$requestedId]"/>

XSLT 1.0, к сожалению, не допускает ссылки на параметры в шаблонах соответствия. Некоторые процессоры XSLT 1.0 не применяют это ограничение, но я не знаю, так ли это для процессора Microsoft.

0 голосов
/ 31 марта 2020

Вы можете использовать XPathNavigator для компиляции выражения xpath, а затем go через соответствующие узлы в вашем коде c#.

// Create and compile the XPathExpression
string _xPathExpression = "/Data/Client[Id = 123]";
XPathExpression exprXPathCompiled 
    = xmlDocInputNavigator.Compile(_xPathExpression);

// Load the Stylesheet
XsltSettings settings = new XsltSettings();
XslCompiledTransform xsltTemplate = new XslCompiledTransform();
xsltTemplate.Load(_stylesheetFileName, settings, new XmlUrlResolver());

// Create an iterator to loop through the matching nodes
XPathNodeIterator iterator = xmlDocInputNavigator.Select(exprXPathCompiled);
StreamWriter fileOutput = null;

while (iterator.MoveNext())
{
    //...

Документация XPathNavigator

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...