使用特定的XML名称空间在C#中生成XML

使用特定的XML名称空间在C#中生成XML,c#,xml,C#,Xml,我试图实现的目标XML: 值 我当前获得的输出: 0 我试图使用System.XML库创建目标XML代码,但是在创建新元素时,名称空间前缀没有显示出来。生成上述输出的代码片段: xmlementerow=xDoc.CreateElement(“行”); xmlementedata=xDoc.CreateElement(“数据”); XmlAttribute xAt=xDoc.CreateAttribute(“ss”,“Type”,null); xAt.Value=“数字”; eData.At

我试图实现的目标XML:

我当前获得的输出:

0
我试图使用
System.XML
库创建目标XML代码,但是在创建新元素时,名称空间前缀没有显示出来。生成上述输出的代码片段:

xmlementerow=xDoc.CreateElement(“行”);
xmlementedata=xDoc.CreateElement(“数据”);
XmlAttribute xAt=xDoc.CreateAttribute(“ss”,“Type”,null);
xAt.Value=“数字”;
eData.Attributes.Append(xAt);
eData.InnerText=“0”;
依附儿童(eData);
我试图将这个XML附加到一个已经存在的文件中。我已将文件加载为

XmlDocument xTemp = new XmlDocument();
xTemp.Load(templatePath);
DocumentElement.Attributes
中已经有名称空间,它们已经声明了我要使用的前缀:
。本质上,我试图让“ss”前缀出现在“Type”之前,就像我上面提供的目标一样。此外,输出将
xmlns=”“
显示为“Row”标记中的属性,这是我从未添加过的。我假设这两个问题都与未声明的名称空间有关,但如上所述,它应该已经在我加载的原始文档中声明


如何生成所需的目标XML代码?

您已经创建了属性xAt,但没有指定名称空间uri,这相当于空字符串名称空间uri(请参阅),这就是为什么您会得到

实际上,您需要指定确切的名称空间uri,以使其按预期工作。 让我使用您在问题中给出的名称空间uri进行说明(说明与初始代码非常相似,但可能有一些小差异,您可以轻松修改)

在这一步中,我可以假设我有一个类似于最初加载文件后的XmlDocument。My XmlDocument将工作簿节点作为其DocumentElement,它使用给定的前缀和命名空间uri

现在我们可以创建属性:

var attribute = xDoc.CreateAttribute("ss", "Type", "urn:schemas-microsoft-com:office:spreadsheet");
attribute.Value = "String";
应正确指定命名空间uri,否则将无法正确呈现它。使用此属性时,由于它引用的命名空间位于嵌套元素(工作簿)上,因此无需在此处再次提及它,框架将自动删除对命名空间uri的引用

现在我们可以继续创建行和数据元素,并将属性添加到数据元素的属性集合中

XmlElement eRow = xDoc.CreateElement("Row");
XmlElement eData = xDoc.CreateElement("Data");

eData.Attributes.Append(attribute);
eData.InnerText = "value";
eRow.AppendChild(eData);

rows.AppendChild(eRow);
workbook.AppendChild(rows);

xDoc.AppendChild(workbook);
然后,我们可以显示文档,例如:

Console.WriteLine(xDoc.OuterXml);
结果:

<ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"><Rows><Row><Data ss:Type="String">value</Data></Row></Rows></ss:Workbook>

我希望这有帮助。

这能回答您的问题吗?你需要在使用前定义ss。我编辑了这个问题以添加一些必要的澄清。简而言之,我已经加载了一个应该定义这些名称空间的文档,但是当我将属性添加到元素时,它不会正确显示。不幸的是,链接的问题实际上没有这种信息。
<ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"><Rows><Row><Data ss:Type="String">value</Data></Row></Rows></ss:Workbook>