Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.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# 使用LINQ生成XML时是否从元素中删除xmlns属性?_C#_Xml_Linq_Linq To Xml - Fatal编程技术网

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。