У меня есть XML и XSL вроде этого:Получить HTML содержимое в виде строки с помощью XSLT
XML
<definitions>
<process id="Process_1">
<Task id="Task_1yh7nak" name="Add">
<Steps>
<Step id="Step_1" Order="1">
<Form>
<form-template>
<fields>
<field type="text" label="start" id="text-14708410685"></field>
<field type="text" label="end" id="text-5651568987"></field>
<field type="button" subtype="button" label="Button" id="button-1470841070721"></field>
</fields>
</form-template>
</Form>
</Step>
</Steps>
</Task>
</process>
</definitions>
XSL
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output method = "text" omit-xml-declaration = "no" indent = "no" encoding="Windows-1252"/>
<!-- Start the code generation here. -->
<xsl:template match ="*">
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using System.Windows.Forms;
namespace Core
{
public static class DynamicCode
{
<xsl:for-each select="/definitions/process/Task">
public static string <xsl:value-of select="@id"/>_GetStartForm()
{
string formContent = "<xsl:for-each select="Steps/Step[@Order='1']/Form/form-template/fields/field">
<!--Switch Case for type of controls -->
<xsl:choose>
<xsl:when test="@type='text'">
<h2> textbox </h2>
<input>
<xsl:attribute name="value">
<xsl:value-of select="@label"/>
</xsl:attribute>
<xsl:attribute name="id">
<xsl:value-of select="@id"/>
</xsl:attribute>
</input>
<br/>
</xsl:when>
<xsl:when test="@type='button'">
<h2> button </h2>
<input type="button">
<xsl:attribute name="value">
<xsl:value-of select="@label"/>
</xsl:attribute>
<xsl:attribute name="id">
<xsl:value-of select="@id"/>
</xsl:attribute>
</input>
<br/>
</xsl:when>
</xsl:choose>
</xsl:for-each>";
return formContent;
}
</xsl:for-each>
}
}
</xsl:template>
</xsl:stylesheet>
Я преобразовать XML с этим XSL (XSLT 1.0).
Выход
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using System.Windows.Forms;
namespace Core
{
public static class DynamicCode
{
public static string Task_1yh7nak_GetStartForm()
{
string formContent = " textbox textbox button ";
return formContent;
}
}
}
Интернет выход: http://xsltransform.net/pPJ8LUY/1
Я стараюсь, чтобы получить полное содержание HTML в fields
тег в виде строки. Мне нужно это содержимое для заполнения Literal
на веб-странице.
<h2> textbox </h2>
<input id="text-14708410685" value="start"></input>
<h2> textbox </h2>
<input id="text-5651568987" value="end"></input>
<h2> button </h2>
<input type="button" id="button-1470841070721" value="submit"></input>
Но на выходе, у меня есть только значение h2
тега.
string formContent = " textbox textbox button ";
Было бы очень полезно, если бы кто-нибудь мог объяснить решение этой проблемы.
Если вы хотите, чтобы такие элементы, как в 'input' элементов в то вам нужно использовать 'xsl: output method =" html "или' xml', используемый вами метод вывода текста должен выводить простой текст в текстовых узлах, но никакой разметки элемента не указывать эс. –
@MartinHonnen thx, я этого не замечал. –
@MartinHonnen Один вопрос, вывод должен быть классом C#, но атрибуты имеют '' '. В строке это делает ошибку. Я не могу использовать \ before и after them в' xsl: value-of'. –