Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/76.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
当试图使用XSLT将XML转换为HTML时,状态EndRootElement中的Token StartElement将导致无效的XML文档[…]错误_Html_Xml_Xslt - Fatal编程技术网

当试图使用XSLT将XML转换为HTML时,状态EndRootElement中的Token StartElement将导致无效的XML文档[…]错误

当试图使用XSLT将XML转换为HTML时,状态EndRootElement中的Token StartElement将导致无效的XML文档[…]错误,html,xml,xslt,Html,Xml,Xslt,我正在尝试通过XSLT将XML转换为HTML 我的XML是: <FooterXmlModel> <Utente>foo@bar.it</Utente> <Today>03/04/2017 17:18:37</Today> </FooterXmlModel> 调用transformer.Transform(xmlContent,_xsltExtensions,xwriter)时出现此错误: 我已经阅读了之前关于这个主

我正在尝试通过XSLT将XML转换为HTML

我的XML是:

<FooterXmlModel>
  <Utente>foo@bar.it</Utente>
  <Today>03/04/2017 17:18:37</Today>
</FooterXmlModel>
调用transformer.Transform(xmlContent,_xsltExtensions,xwriter)时出现此错误:


我已经阅读了之前关于这个主题的所有问题,但我不明白为什么会出现这个错误,因为在我看来,我的XML格式很好。

您的XSLT样式表试图创建一个XML片段,该片段由两个
div
元素组成,由
hr
分隔,三个元素在树的顶层都是同级元素。A有一个根元素:

[定义:只有一个元素,称为根,或 文档元素,其任何部分都不会出现在任何其他文档的内容中 要素。]


错误消息清楚地告诉您,
settings.ConformanceLevel=ConformanceLevel.Document
与您的输出lind不符,set
settings.ConformanceLevel=ConformanceLevel.Fragment
注意:在XDM数据模型中,允许有多个元素子级的文档节点,序列化程序将处理它(输出“外部通用解析实体”,允许多个顶级元素)。但是您的转换输出的其他目的地可能不接受它:例如,SAXResult可能会抱怨。非常感谢!这是因为xslt文件的格式有多个根元素。我认为只有要转换的xml文件才需要格式良好。@davideAlbertini XSLT规范允许结果是一个xml片段(具有多个根元素)。显然,在您当前的设置下,您的处理器比这更严格顺便说一句,它是格式良好的,不是格式化的,它是具有多个根元素的结果,而不是XSLT文件本身。
<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" />
  <xsl:template match="/">
  <!--Footer-->
  <div>
    <b>User: </b>
    <p>© All Rights Reseved. P.IVA xxxyyyzzzwww</p>   -
    <xsl:value-of select="/FooterXmlModel/Utente"/>   -
    <xsl:value-of select="/FooterXmlModel/Today"/>
  </div>
  <hr style=" width 100%; height:2px; border-style:solid; margin:1px;clear:left;" />
  <div>
   <span>http://new.foo.it</span>
  </div>
  </xsl:template>
</xsl:stylesheet>
public string TransformToHtml(IPrintablePartXml document, IXPathNavigable xsltStyleSheet)
        {
            //XML Containing the actual document
            var xmlDoc = document.GetXmlContent();
            //resulting html file
            string htmlDoc = String.Empty;

            XPathNavigator xmlContent = new XPathDocument(new XmlTextReader(new StringReader(xmlDoc))).CreateNavigator();

            using (MemoryStream xslFoStream = new MemoryStream())
            {
                XmlWriterSettings settings = new XmlWriterSettings();
                settings.Encoding = new UTF8Encoding(false);
                settings.ConformanceLevel = ConformanceLevel.Document;
                settings.Indent = true;

                using (XmlWriter xwriter = XmlWriter.Create(xslFoStream, settings))
                {
                    XslCompiledTransform transformer = new XslCompiledTransform(false);

                    transformer.Load(xsltStyleSheet);
                    transformer.Transform(xmlContent, _xsltExtensions, xwriter);

                    xwriter.Flush();

                    xslFoStream.Position = 0;

                    StreamReader sr = new StreamReader(xslFoStream);
                    htmlDoc = sr.ReadToEnd();
                }

                return htmlDoc;
            }

        }
Token StartElement in state EndRootElement would result in an invalid
XML document. Make sure that the ConformanceLevel setting is set to 
ConformanceLevel.Fragment or ConformanceLevel.Auto if you want to write
an XML fragment.