【问题标题】:How to add a namespace when parsing string to Xelement?将字符串解析为 Xelement 时如何添加命名空间?
【发布时间】:2019-03-19 12:29:20
【问题描述】:

我希望为下面的Xelement 设置一个命名空间。如何实现?

string Namespace = "http://mynamespace";
string defaultXml = "<ReferResult><Text> Testing Referred</Text></ReferResult>"

Xelement myXml = XElement.Parse(defaultXml);

// How to add the name space to myXml?

【问题讨论】:

    标签: c# xml linq xml-namespaces xelement


    【解决方案1】:
    XNamespace Namespace = "http://mynamespace";
    string defaultXml = "<ReferResult><Text> Testing Referred</Text></ReferResult>";
    
    XElement myXml = XElement.Parse(defaultXml);
    myXml.Name = Namespace + myXml.Name.LocalName;
    
    //If you want the children to have the same namespace, use the following.
    //If you want only the parent to have the namespace, omit the code bellow 
    foreach(var element in myXml.Descendants()){
        element.Name = Namespace + element.Name.LocalName;
    }
    
    //Output:
    //<ReferResult xmlns="http://mynamespace">
    //    <Text> Testing Referred</Text>
    //</ReferResult>
    

    编辑:按照 OP 在 cmets 中的要求,要删除命名空间,只需使用相同的代码,但省略命名空间部分:

    myXml.Name = myXml.Name.LocalName;
    foreach(var element in myXml.Descendants()){
        element.Name = element.Name.LocalName;
    }
    

    【讨论】:

    • 嗨磁控管,谢谢。在上面的示例中,您是否也可以编写如何删除所有命名空间,包括一个空的命名空间?
    • @rohitsingh “空”命名空间是指默认命名空间。无法删除它。你能发布一个例子来说明你的意思吗?你得到的输出和想要的输出?
    • @rohitsingh 无论如何,我发布了删除命名空间的代码。
    • 我的最终目标是将没有任何命名空间的这一小块 xml 附加到另一个 xml(具有所有命名空间)中,并且由于我无法删除命名空间,我想从父 xml 到这个 xml。但如果我能实现最终目标,那就太棒了
    • @rohitsingh 好吧,如果您不希望在将 xml 转换为字符串时显示“xmlns ...”,那么您需要要做的是确保元素名称空间与其父名称空间匹配,就像我发布的输出一样,TextReferResult 具有相同的名称空间,因此不会显示。但是如果只将Text 节点转换为字符串,则会显示命名空间。
    猜你喜欢
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 2014-12-31
    • 1970-01-01
    • 2012-07-15
    相关资源
    最近更新 更多