添加带有前缀的开始元素,没有命名空间
Posted
技术标签:
【中文标题】添加带有前缀的开始元素,没有命名空间【英文标题】:Add start element with prefix without namespace 【发布时间】:2017-11-27 20:28:26 【问题描述】:有没有办法像这样在 XmlWriter 中使用 WriteStartElement 函数:
XmlWriter.WriteStartElement("prefix", "name", null);
发生错误:System.ArgumentException:'无法使用前缀 空命名空间。'
我不想在创建元素时设置命名空间 URI。 稍后通过 WriteAttributeString() 添加它,当其他属性将被创建时。
【问题讨论】:
【参考方案1】:不,未绑定到命名空间 URI 的命名空间前缀是没有意义的,并且不允许在 namespace-well-formed XML 文档中。
【讨论】:
【参考方案2】:我不想在创建元素时设置命名空间 URI。稍后通过 WriteAttributeString() 添加它,当其他属性将被创建时。
前缀始终属于命名空间。通过定义一个非空命名空间,xmlns
属性将被自动创建:
writer.WriteStartElement("prefix", "localName", "ns"); // <prefix:localName xmlns:prefix="ns" />
【讨论】:
【参考方案3】:我遇到了同样的问题,我正在寻找解决方案,最终,我意识到我应该使用我已经定义的相同命名空间。
我有这样的东西来创建元素:
xmlWriter.WriteStartElement("xhtml", "link", "xmlns");
结果是:
<?xml version="1.0" encoding="utf-8" ?>
<urlset xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://www.my-site.com/en/home</loc>
<xhtml:link rel="alternative" hreflang="en" href="https://www.my-site.com/en/home" xmlns:xhtml="xmlns" />
<xhtml:link rel="alternative" hreflang="ar" href="https://www.my-site.com/fr/home" xmlns:xhtml="xmlns" />
<xhtml:link rel="alternative" hreflang="fa" href="https://www.my-site.com/fa/home" xmlns:xhtml="xmlns" />
</url>
</urlset>
问题是我的 xhtml:link
元素正文中的 xmlns:xhtml="xmlns"
:
<xhtml:link rel="alternative" hreflang="en" href="https://www.my-site.com/en/home" xmlns:xhtml="xmlns" />
所以我将http://www.w3.org/1999/xhtml
改为命名空间或ns,如下所示:
xmlWriter.WriteStartElement("xhtml", "link", "http://www.w3.org/1999/xhtml");
现在它正是我所需要的:
<?xml version="1.0" encoding="utf-8" ?>
<urlset xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://www.my-site.com/en/home</loc>
<xhtml:link rel="alternative" hreflang="en" href="https://www.my-site.com/en/home" />
<xhtml:link rel="alternative" hreflang="ar" href="https://www.my-site.com/fr/home" />
<xhtml:link rel="alternative" hreflang="fa" href="https://www.my-site.com/fa/home" />
</url>
</urlset>
【讨论】:
很高兴您能够解决对WriteStartElement
参数的困惑,但您的问题不同:OP 的问题在于想要创建一个具有未定义命名空间前缀的元素,即在命名空间格式良好的 XML 中不允许;您的问题是您只是误解了 WriteStartElement()
的第三个参数的目的,但是一旦您纠正了错误,就可以将命名空间前缀绑定到命名空间。以上是关于添加带有前缀的开始元素,没有命名空间的主要内容,如果未能解决你的问题,请参考以下文章