我有一个为列表对象生成 xml 的函数:
public XDocument ToXML()
{
foreach (var row in this)
{
var xml = row.ToXml();
template.Root.Add(xml);
}
return template;
}
The 模板.ToString() reads: <RootElement xmlns="urn:testTools">
The xml reads: <Example><SubElement>testData</SubElement></Example>
添加函数执行后模板.ToString() reads: <RootElement xmlns="urn:testTools"><Example xmlns=""><SubElement>testData</SubElement></Example>
因此,由于某种原因添加了一个空的命名空间,我怎样才能阻止它这样做呢?
下面是一个输出没有空命名空间的 xml 的示例。请注意奇怪的以 Linq 为中心的语法 rootNamespace +“MyElementName”,这就是秘密。这是与整个文档相同的命名空间,因此不需要添加 xmlns。这是连接 XNamespace + 字符串,这是适用于 Linq 并且 Linq 知道如何处理的“+”重载。 (如果没有 Linq,连接字符串和非字符串类型可能会出现编译错误)。请注意,这是针对 C# 项目文件执行的,该文件是一个方便的 Xml 文件。将其输出到控制台或 Richtextbox 控件。然后取出“rootNamespace +”并注意差异。
XDocument doc = null;
using (StreamReader streamReader =
new StreamReader(@"myXml.csproj"))
{
doc = XDocument.Load(streamReader, LoadOptions.None);
}
XNamespace rootNamespace = doc.Root.Name.NamespaceName;
// A search which finds the ItemGroup which has Reference
// elements and returns the ItemGroup XElement.
XElement element = doc.Descendants().Where(p => p.Name.LocalName == "ItemGroup"
&& p.Descendants().First<XElement>().Name.LocalName == "Reference").First<XElement>();
// Create a completly new element with sub elements.
XElement referenceElement = new XElement(rootNamespace + "Reference",
new XElement(rootNamespace + "SpecificVersion", bool.FalseString),
new XElement(rootNamespace + "HintPath", "THIS IS A HINT PATH"));
// Add the new element to the main doc, to the end of the Reference elements.
element.Add(referenceElement);
// Add an attribute after the fact for effect.
referenceElement.SetAttributeValue("Include", "THIS IS AN INCLUDE");
rtb.Text = doc.ToString(SaveOptions.None);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)