我有一个xml文件,我要添加预定义的名称..以下是代码:
private const string uri = "http://www.w3.org/TR/html4/";
private static readonly List<string> namespaces = new List<string> { "lun" };
public static XElement AddNameSpaceAndLoadXml(string xmlFile) {
var nameSpaceManager = new XmlNamespaceManager(new NameTable());
// add custom namespace to the manager and take the prefix from the collection
namespaces.ToList().ForEach(name => {
nameSpaceManager.AddNamespace(name, string.Concat(uri, name));
});
XmlParserContext parserContext = new XmlParserContext(null, nameSpaceManager, null, XmlSpace.Default);
using (var reader = XmlReader.Create(@xmlFile, null, parserContext)) {
return XElement.Load(reader);
}
}
问题是内存中生成的xml没有显示添加的正确名称空间。此外,它们不会添加到根目录,而是添加到标记旁边。 Xml在下面添加。
在xml中,它显示为p3:read_data
,而应为lun:read_data
。
如何在根标记上添加命名空间,而不是获取错误的名称。
示例输入xml:
<config file-suffix="perf">
<overview-graph title="Top 5 LUN Reads" max-series="5" remove-series="1">
<counters lun:read_data=""/>
</overview-graph>
</config>
预期输出xml:
<config file-suffix="perf" xmlns:lun="http://www.w3.org/TR/html4/lun">
<overview-graph title="Top 5 LUN Reads" max-series="5" remove-series="1">
<counters lun:read_data="" />
</overview-graph>
</config>
使用上述代码输出:
<config file-suffix="perf" >
<overview-graph title="Top 5 LUN Reads" max-series="5" remove-series="1">
<counters p3:read_data="" xmlns:p3="http://www.w3.org/TR/html4/lun"/>
</overview-graph>
</config>
答案 0 :(得分:0)
我不确定是否有更好的方法,但手动添加命名空间似乎有效。
using (var reader = XmlReader.Create(@xmlFile, null, parserContext)) {
var newElement = XElement.Load(reader);
newElement.Add(new XAttribute(XNamespace.Xmlns + "lun", string.Concat(uri, "lun")));
return newElement;
}
我不知道一种方法来概括这一点(显然你可以通过枚举它来添加整个集合,但输出仅使用的命名空间可能会很有趣)。