我使用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>";
当我构建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",
...我的XML代码......
XElement.Load(new StringReader(XMLDetails))
...... XML代码结束......
如上所述。我的代码有效,它为我成功输出XML。它只是我使用XElement.Load加载的MyNewTag标记将xmlns =“”添加到它的末尾,这导致了我的问题。
我有什么想法可以解决这个问题吗?谢谢你的帮助。
此致 富
答案 0 :(得分:7)
怎么样:
XElement withoutNamespace = XElement.Load(new StringReader(XMLDetails));
XElement withNamespace = new XElement(ns + withoutNamespace.Name.LocalName,
withoutNamespace.Nodes());
作为更好的替代方案 - 为什么不在构建XML时包含命名空间,或者更好的是,创建XElement
而不是手动生成您随后读取的XML字符串。手动创建XML很少是一个好主意。除了其他任何事情,你假设ValuePassedThrough
已经被转义,或者不需要转义等等。可能有效 - 但这至少是引起关注的原因。< / p>
答案 1 :(得分:1)
喜欢这个
XElement XMLDetails = new XElement(ns + "OpeningTAG", new XElement(ns + "MyNewTag", new XAttribute("Code", 14), new XAttribute("Value", 123)));
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"),
XMLDetails));