Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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
C# 在编写sitemap.xml的“xhtml:link”元素时,使用XmlTextWriter没有什么帮助_C#_Xml_Xmltextwriter - Fatal编程技术网

C# 在编写sitemap.xml的“xhtml:link”元素时,使用XmlTextWriter没有什么帮助

C# 在编写sitemap.xml的“xhtml:link”元素时,使用XmlTextWriter没有什么帮助,c#,xml,xmltextwriter,C#,Xml,Xmltextwriter,您好,我正在尝试编写一个字符串,如: <xhtml:link rel="alternate" hreflang="de" href="http://www.example.com/de" /> 问题是,当我在Controller上检查生成的站点地图时: public ActionResult Sitemap() { var sitemap = _sitemapGenerator.Generate().ToString(); retu

您好,我正在尝试编写一个字符串,如:

 <xhtml:link rel="alternate" hreflang="de" href="http://www.example.com/de" />
问题是,当我在Controller上检查生成的站点地图时:

    public ActionResult Sitemap()
    {
        var sitemap = _sitemapGenerator.Generate().ToString();
        return Content(sitemap,"text/xml");
    }
整个xml并不像预期的那样,元素是用一个非空的结束标记呈现的,因此我不知道这是否是一个问题。。请看图片


更新2:解决了!XML结构似乎有效,但浏览器没有正确显示…您应该更改为使用不同的XmlWriter.StartElement重载。例如:

_writer.WriteStartElement("link", "http://www.w3.org/1999/xhtml");
假设您已经为名称空间设置了一个前缀别名xhtmlhttp://www.w3.org/1999/xhtml. 我仍然建议尽快使用LINQ转换为XML。。。XmlWriter非常适合于您确实需要流式传输数据的情况,例如,当数据非常大时,但在其他情况下,LINQ to XML使事情变得更加简单:

XNamespace xhtml = "http://www.w3.org/1999/xhtml";
var element = new XElement(xhtml + "link",
     new XAttribute("rel", "alternate"),
     new XAttribute("hreflang", "de"),
     new XAttribute("href", "http://example.com/de"));
parent.Add(element);

您应该更改为使用XmlWriter.StartElement的不同重载。例如:

_writer.WriteStartElement("link", "http://www.w3.org/1999/xhtml");
假设您已经为名称空间设置了一个前缀别名xhtmlhttp://www.w3.org/1999/xhtml. 我仍然建议尽快使用LINQ转换为XML。。。XmlWriter非常适合于您确实需要流式传输数据的情况,例如,当数据非常大时,但在其他情况下,LINQ to XML使事情变得更加简单:

XNamespace xhtml = "http://www.w3.org/1999/xhtml";
var element = new XElement(xhtml + "link",
     new XAttribute("rel", "alternate"),
     new XAttribute("hreflang", "de"),
     new XAttribute("href", "http://example.com/de"));
parent.Add(element);

如果您将使用XML编写器编写

<xhtml:link rel="alternate" hreflang="en" href="www.yoursite.com" /> 

如果您将使用XML编写器编写

<xhtml:link rel="alternate" hreflang="en" href="www.yoursite.com" /> 

您一定要使用XmlTextWriter吗?使用像LINQ到XML这样的东西会使所有事情变得更简单。不幸的是,是的,因为我已经用这种方式做了一些工作。。。但是,如果没有任何解决方案,我会考虑你的建议。好吧,这是有解决方案的——只是你越是以这种痛苦的风格编写,就越需要转移到LINQ到XML……同意:嗯。。因此,如果要切换到执行此操作的新方法,您建议选择LINQ to XML?或者还有其他更好的选择?我肯定会使用LINQtoXML。你一定要使用XmlTextWriter吗?使用像LINQ到XML这样的东西会使所有事情变得更简单。不幸的是,是的,因为我已经用这种方式做了一些工作。。。但是,如果没有任何解决方案,我会考虑你的建议。好吧,这是有解决方案的——只是你越是以这种痛苦的风格编写,就越需要转移到LINQ到XML……同意:嗯。。因此,如果要切换到执行此操作的新方法,您建议选择LINQ to XML?或者还有其他更好的选择?我肯定会使用LINQtoXML。谢谢你的回答,我想今天我将把所有代码都转移到LINQtoXML。看起来容易多了!!顺便说一句,您建议的语句生成:它与?@Christian:大致相当吗?但是如果您有一个带有xmlns:xhtml的祖先元素=http://www.w3.org/1999/xhtml 然后它会自动生成。嗯,我不知道这个:谢谢!我会深入探索乔恩,再次需要你的帮助!:谢谢您的回答,我想今天我将把所有代码转移到LINQ到XML。看起来容易多了!!顺便说一句,您建议的语句生成:它与?@Christian:大致相当吗?但是如果您有一个带有xmlns:xhtml的祖先元素=http://www.w3.org/1999/xhtml 然后它会自动生成。嗯,我不知道这个:谢谢!我会深入探索乔恩,再次需要你的帮助!: