使用XElement.Load时如何添加(或忽略)XML命名空间

Ric*_*ddy 3 c# linq xelement namespaces

我正在使用Linq to XML和C#创建XML.这一切都很有效,除非我需要在XML中手动添加一行.只有当我有一个值传递给它时才会添加此行,否则我只是忽略整个标记.

我使用XElement.Load加载我存储在字符串中的文本字符串,但是当我将它附加到XML时,它总是在我的标记的末尾放入xmlns ="".

有没有办法告诉XElement.Load使用现有的命名空间,或者在将字符串放入XML时忽略它?

理想情况下,我只希望将我的字符串包含在正在创建的XML中,而不添加额外的标记.

以下是我目前所做的一个示例:

string XMLDetails = null;
if (ValuePassedThrough != null)
XMLDetails = "<MyNewTag Code=\"14\" Value=\"" + ValuePassedThrough +"\"></MyNewTag>";
Run Code Online (Sandbox Code Playgroud)

当我构建XML时,我将上面的字符串加载到我的XML中.在这里,xmlns =""被添加到XMLDetails值,但理想情况下我希望忽略它,因为它在尝试读取此标记时导致收件人出现问题.

XNamespace ns = "http://namespace-address";
    XNamespace xsi = "http://XMLSchema-instance-address";

XDocument RequestDoc = new XDocument(
    new XDeclaration("1.0", "utf-8", null),
    new XElement(ns + "HeaderTag",
        new XAttribute("xmlns", ns),
new XAttribute(XNamespace.Xmlns + "xsi", xsi),
new XAttribute(xsi + "schemaLocation", "http://www.addressofschema.xsd"),
        new XAttribute("Version", "1"),
            new XElement(ns + "OpeningTAG",
Run Code Online (Sandbox Code Playgroud)

...我的XML代码......

XElement.Load(new StringReader(XMLDetails))
Run Code Online (Sandbox Code Playgroud)

... XML代码结束......

正如刚才提到的.我的代码有效,它为我成功输出XML.它只是我使用XElement.Load加载的MyNewTag标记将xmlns =""添加到它的末尾,这导致了我的问题.

有什么想法我可以解决这个问题吗?谢谢你的帮助.

此致,Rich

Jon*_*eet 7

怎么样:

XElement withoutNamespace = XElement.Load(new StringReader(XMLDetails));
XElement withNamespace = new XElement(ns + withoutNamespace.Name.LocalName,
                                      withoutNamespace.Nodes());
Run Code Online (Sandbox Code Playgroud)

作为一个更好的选择 - 为什么不在构建XML时包含命名空间,或者甚至更好,创建一个XElement而不是手动生成一个XML字符串然后读取.手动创建XML很少是一个好主意.除了其他任何东西,你假设ValuePassedThrough已经逃脱,或者不需要逃避等等.这可能是有效的 - 但它至少是一个令人担忧的原因.