C#和XML:为什么XMLNS attirubute设置为所有子节点?

时间:2014-05-29 13:08:32

标签: c# xml

以下是我的尝试: 创建元素:

            XmlNode xHeader = xDoc.CreateElement("Customer");
            XmlNode xCustomerID = xDoc.CreateElement("Customer_ID", strListName);
            XmlNode xName = xDoc.CreateElement("Full_Name");
            XmlNode xEmail = xDoc.CreateElement("Email");
            XmlNode xHomeAddress = xDoc.CreateElement("Home_Address");
            XmlNode xMobileNumber = xDoc.CreateElement("Mobile_Number");  

将节点附加到文档。

           xDoc.DocumentElement.AppendChild(xHeader);
            xHeader.AppendChild(xCustomerID);
            xCustomerID.AppendChild(xEmail);
            xCustomerID.AppendChild(xHomeAddress);
            xCustomerID.AppendChild(xMobileNumber);

这是XML中生成的内容。 http://pastebin.com/dNs8Ueiw 我希望Customer_ID的子节点中没有xmlns =“”。

1 个答案:

答案 0 :(得分:2)

如果您想要XML:

<Customer_ID xmlns="a">
  <Email>
  </Email>
  <Home_Address>
  </Home_Address>
  <Mobile_Number>
  </Mobile_Number>
</Customer_ID>

...然后您需要确保您的EmailHome_AddressMobile_Number元素与Customer_ID元素位于同一名称空间中:

XmlNode xCustomerID = xDoc.CreateElement("Customer_ID", strListName);
XmlNode xEmail = xDoc.CreateElement("Email", strListName);
XmlNode xHomeAddress = xDoc.CreateElement("Home_Address", strListName);
XmlNode xMobileNumber = xDoc.CreateElement("Mobile_Number", strListName); 

基本上你看到命名空间默认的结果 - 除非为一个元素指定了xmlns=...,否则它会继承其父级的命名空间。

(另请注意,如果可以,您应该使用LINQ to XML - 它是一个更令人愉快的XML API,具有更好的命名空间处理。)