使用C# XDocument生成带p2命名空间属性的XML元素报错,求正确方法
正确生成带命名空间属性的XML元素方案
你遇到的问题是因为直接在属性名里使用冒号:不符合LINQ to XML的命名空间处理规则——冒号是命名空间与本地名称的分隔符,不能直接作为属性名的一部分,必须通过XNamespace来构造带命名空间的属性。
下面是实现预期输出的正确代码:
// 定义XMLSchema-instance的命名空间 XNamespace p2Ns = "http://www.w3.org/2001/XMLSchema-instance"; // 构造Details元素 var detailsElement = new XElement("Details", // 声明p2前缀对应的命名空间 new XAttribute(XNamespace.Xmlns + "p2", p2Ns), // 构造属于p2命名空间的type属性 new XAttribute(p2Ns + "type", "SomeStuff") ); // 输出验证结果 Console.WriteLine(detailsElement.ToString());
这段代码运行后会生成你期望的XML:
return (<Details xmlns:p2="http://www.w3.org/2001/XMLSchema-instance" p2:type="SomeStuff"></Details> )
原理说明
- 命名空间声明属性:
XNamespace.Xmlns是XML标准的命名空间前缀声明的命名空间,XNamespace.Xmlns + "p2"会生成xmlns:p2这个属性名,对应的值就是你指定的XMLSchema-instance命名空间。 - 带命名空间的属性:
p2Ns + "type"会将命名空间与本地属性名type组合,LINQ to XML会自动将其渲染为p2:type,同时确保属性的命名空间关联正确,不会触发冒号相关的异常。
内容的提问来源于stack exchange,提问作者Quantum_Kernel
相关产品推荐
相关产品推荐

