C# 使用LINQ生成XML时是否从元素中删除xmlns属性?
我在生成C# 使用LINQ生成XML时是否从元素中删除xmlns属性?,c#,xml,linq,linq-to-xml,C#,Xml,Linq,Linq To Xml,我在生成sitemap.xml 我的创建者代码如下: XNamespace xmlns = XNamespace.Get("http://www.sitemaps.org/schemas/sitemap/0.9"); XNamespace xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance"); XNamespace schemaLocation = XNamespace.Get("http://www.sitemaps
sitemap.xml
我的创建者代码如下:
XNamespace xmlns = XNamespace.Get("http://www.sitemaps.org/schemas/sitemap/0.9");
XNamespace xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance");
XNamespace schemaLocation = XNamespace.Get("http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd");
XElement urlset = new XElement(xmlns+"urlset",
new XAttribute(XNamespace.Xmlns + "xsi", xsi),
new XAttribute(xsi + "schemaLocation", schemaLocation));
urlset.Add(new XElement("url"));
此代码生成xml文件,但生成的sitemap.xml
url元素包含xmlns=”“
属性
<urlset xmlns="..." ><url xmlns=""/> </urlset>
所有
元素都包含xmlns=”“
属性
<urlset xmlns="..." ><url xmlns=""/> </urlset>
如何解决此问题?请尝试此代码
XmlDocument stripDocumentNamespace(XmlDocument oldDom)
{
XmlDocument newDom = new XmlDocument();
newDom.LoadXml(Regex.Replace(oldDom.OuterXml,
@"(xmlns:?[^=]*=[""][^""]*[""])", "",
RegexOptions.IgnoreCase | RegexOptions.Multiline));
return newDom;
}
我认为可以比我更好地汇总名称空间,您已经为“url”节点上方的所有节点和属性提供了限定的名称空间。当您添加urlset.add(新的XElement(“url”)代码>它应该如何确定它所在的命名空间
我建议您尝试一下,看看它是如何为您服务的:
static void Main ( string [] args )
{
XNamespace xmlns = XNamespace.Get("http://www.sitemaps.org/schemas/sitemap/0.9");
XNamespace xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance");
XNamespace schemaLocation = XNamespace.Get("http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd");
XElement urlset = new XElement(xmlns+"urlset",
new XAttribute(XNamespace.Xmlns + "xsi", xsi),
new XAttribute(xsi + "schemaLocation", schemaLocation));
urlset.Add(new XElement(xmlns+"url")); // NB> We are qualifying the node
var s = urlset.ToString( );
Console.ReadKey( );
}
是否可以显示添加Url的代码?如果要添加Url节点,例如urlset.add(new-XElement(xmlns+“Url”)代码>那么你就不会得到空的名称空间属性…或者至少我没有编辑这个urlset.Add(new-XElement(“url”);如果url和urlset都属于同一名称空间,那么您可以限定urlset,xmlns+“urlset”
而不是urlset。我能理解为什么正则表达式是处理XML的糟糕做法吗?谢谢。非常简单地说,正则表达式与CS中所谓的“正则语言”相匹配。XML不是一种常规语言(HTML也不是)。正则表达式不能匹配所有XML。