Autoclose xml tag во время преобразования xslt - PullRequest
0 голосов
/ 18 февраля 2011

У меня есть:

<input type="checkbox" name="idsProduct" value="{@id}" 
       id="form_checkbox_product_{@id}">
    <xsl:if test="$x=$y">
        <xsl:attribute name="checked" >checked</xsl:attribute>
    </xsl:if>
</input>

, и я получаю:

  <input type="checkbox" name="idsProduct" value="26294"
         id="form_checkbox_product_26294" checked="checked"></input>

Мне нужен тег ввода:

<input type="checkbox" name="idsProduct" value="26294" 
       id="form_checkbox_product_26294" checked="checked" />

мой вывод xsl:

 <xsl:output 
      omit-xml-declaration="yes" 
      method="xml"
      encoding="utf-8"
      indent="no" />

Как я могу автоматически закрыть этот тег?

Ответы [ 2 ]

1 голос
/ 18 февраля 2011

Это похоже на этот вопрос (хотя ваша проблема заключается в прямом обратном):

Использование xsl: if не включает закрывающий тег

Есть обсуждениездесь уловка, которая заставляет использовать более длинную форму закрытого элемента, которую вы, по-видимому, непреднамеренно используете здесь, в несколько иной форме.Я подозреваю, что ваша проблема в том, что вы просите xslt выводить текст напрямую.Сначала вывод в документ XML, а затем сериализация, которая должна решить вашу проблему.

Вот метод расширения, который я использовал для преобразования в XmlDocument, а не в строку, которую затем вы можете просто прочитать .OuterXmlсвойство, если вы хотите строковый эквивалент;поскольку XSLT не выполняет вывод в текст, он должен правильно обрабатывать закрытые теги.

    public static XmlDocument Transform(this XmlDocument input, XslCompiledTransform xslt)
    {
        XmlDocument outDoc = new XmlDocument(input.CreateNavigator().NameTable);
        using (XmlWriter xr = outDoc.CreateNavigator().AppendChild())
        {
            xslt.Transform(input, xr);
        }

        return outDoc;
    }
0 голосов
/ 18 февраля 2011

Попробуйте удалить все пробелы между тегами:

<input type="checkbox" name="idsProduct" value="{@id}" id="form_checkbox_product_{@id}"><xsl:if test="$x=$y"><xsl:attribute name="checked" >checked</xsl:attribute></xsl:if></input>

Это работает?

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