在解析期间设置命名空间

Posted

技术标签:

【中文标题】在解析期间设置命名空间【英文标题】:Setting the namespace during a parse 【发布时间】:2012-06-22 14:56:19 【问题描述】:

您好,我目前在解析没有任何命名空间的 Xml 字符串并添加到具有命名空间的现有 XElement 时遇到问题。

我的代码:

XElement elem = root.Element(xs + "methodCall");
if (elem != null)

    XElement e = XElement.Parse(this.MethodCallXML);

    elem.Add(e);

结果:

<methodCall>
  <methodCall service="activity" method="activityDeleteComment" xmlns="">
    <espSessionState>espSessionState1</espSessionState>
    <traceFlowCode>true</traceFlowCode>
    <params>
      <commentID>http://uri1</commentID>
      <isPermanentDelete>false</isPermanentDelete>
    </params>
  </methodCall>
</methodCall>

我的问题是 xmlns="" 我无法弄清楚如何使用 parse 方法创建节点并给它一个默认的命名空间来使用。

有什么办法吗?

【问题讨论】:

【参考方案1】:

好的,我知道如何将命名空间添加到新的 XElement 和所有后代

foreach (XElement ce in e.DescendantsAndSelf())
     ce.Name = xs + ce.Name.LocalName;

到目前为止,这解决了我的问题,但如果有人能看到潜在的缺陷或更简单的方法,请告诉我。

【讨论】:

以上是关于在解析期间设置命名空间的主要内容,如果未能解决你的问题,请参考以下文章

Silverlight 工具包命名空间“有时”未知

无法解析命名空间成员“线程”

『XML』XML/XSD命名空间解析

命名空间中的内联函数在 gcc 上的链接期间生成重复的符号

命名空间--名称解析规则

如何在 .NET 中的反序列化期间指定 XML 序列化属性以支持命名空间前缀?