从XML中通过Attribute或Regex删除命名空间字符串

时间:2018-01-15 10:09:39

标签: c# regex xml

我创建了一个XML文件,但其中一个重复节点是添加命名空间引用(xmlns:kk =" kk")我似乎无法将其删除。仅添加到第一个元素/节点。当我手动删除它时,XML文件将对XSD进行验证。

我尝试在创建xml属性时使用正则表达式删除它。

创建XML

XmlDocument doc
 =doc.Load(System.Configuration.ConfigurationManager.AppSettings["doctemploc"]);
    XmlElement Blaett = doc.CreateElement("kk:Blaett","kk");
    XmlAttribute numbber = doc.CreateAttribute("number");
    Blaett.Attributes.Append(numbber);

尝试了

XmlElement Blaett = doc.CreateElement("Blaett");

nummer.RemoveAttribute("xmlns:kk");
nummer.Attributes().Where(a => a.IsNamespaceDeclaration).Remove()
nummer.Attributes("xmlns").Remove();

创建XML文件后

public static class XMLExtensions
{
    public static void RemoveNamespace(this XmlDocument document, string 
@namespace) =>
        document.InnerXml = Regex.Replace(
            document.InnerXml,
            $@"((?<=\</|\<){@namespace}:|xmlns:{@namespace}=""[^""]+"")", 
            "");
}

这使得所有KK引用都需要xmlns:kk =&#34; kk&#34;除去

1 个答案:

答案 0 :(得分:0)

经过几天的痛苦,而不是KK我将url添加到命名空间

  namespace1 = "http://xmls.site.se/section/3.1";
  XmlElement Blaett = doc.CreateElement("kk:Blaett"," namespace1);

我确实必须将此添加到每个XmlElement,但它删除了问题,实际上删除了xmlns:kk =“kk”。

根据XSD验证...快乐的日子