Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
xsl方法中的自动关闭标记:xml_Xml_Xslt_Html_Methods - Fatal编程技术网

xsl方法中的自动关闭标记:xml

xsl方法中的自动关闭标记:xml,xml,xslt,html,methods,Xml,Xslt,Html,Methods,我正在使用一个使用“xsl-method:xml”创建html模板的网站。但是,当xsl引擎呈现html页面时,我遇到了标记自动关闭的问题 转换为=> 该方法需要保留xml,否则页面的其他组件将无法正确呈现,这一事实加剧了这个问题 关于如何告诉xsl为节点创建一个特殊异常,您有什么想法吗 这个问题与这个问题类似,只是我想保留方法:xml。 默认情况下,method=xml不可用。您可以通过以下两种方式进行处理: 选项1-切换到method=xhtml 如果您不能切换到method=xml,并且您

我正在使用一个使用“xsl-method:xml”创建html模板的网站。但是,当xsl引擎呈现html页面时,我遇到了标记自动关闭的问题

转换为=>

该方法需要保留xml,否则页面的其他组件将无法正确呈现,这一事实加剧了这个问题

关于如何告诉xsl为节点
创建一个特殊异常,您有什么想法吗

这个问题与这个问题类似,只是我想保留方法:xml。

默认情况下,method=xml不可用。您可以通过以下两种方式进行处理:

选项1-切换到method=xhtml

如果您不能切换到method=xml,并且您正在使用XSLT2.0解析器,那么您可以尝试method=xhtml吗

<xsl:output method="xhtml" indent="yes" />

这将使您的结束标记被呈现

选项2-在“div”标记中添加空格

或者,只需添加
(标记之间有一个空格),以使
不为空(当然,如果空格允许的话)

考虑以下XML:

<div></div>

当转换为:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

  <!-- output is xml -->
  <xsl:output method="xml" indent="yes" />

  <xsl:template match="div">
    <div>
      <!-- note space here -->
      <xsl:text> </xsl:text>
      <xsl:value-of select="text()" />
    </div>
  </xsl:template>
</xsl:stylesheet>

它产生输出:

<?xml version="1.0" encoding="UTF-8"?>
<div> </div>

我也有同样的问题。问题是XmlTextWriter只会弄乱html。请尝试以下代码:

public static string Transform(string xmlPath, string xslPath, XsltArgumentList xsltArgumentList)
    {
        string rc = null;
        using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
        {
            XPathDocument myXPathDoc = new XPathDocument(xmlPath);
            XslCompiledTransform myXslTrans = new XslCompiledTransform();
            myXslTrans.Load(xslPath, new XsltSettings(true, true), null);
            myXslTrans.Transform(myXPathDoc, xsltArgumentList, ms);
            ms.Position = 0;
            using (System.IO.TextReader reader = new System.IO.StreamReader(ms, Encoding.UTF8))
            {
                rc = reader.ReadToEnd();
            }
        }
        return rc;
    }
我使用XsltArgumentList将信息传递给xslt。如果不需要向xslt传递参数,则可以如下方式调用该方法:

string myHtml = Transform(myXmlPath, myXslPath, new XsltArgumentList());

不完全确定
xhtml
是否是method属性的有效值,但
html
肯定会起作用-我认为它是有效的:但仅适用于XSLT2.0。