c#和XML:为什么将XMLNS属性设置为所有子节点?

本文关键字:设置 子节点 属性 XMLNS XML 为什么 | 更新日期: 2023-09-27 18:05:57

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

            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 = "

c#和XML:为什么将XMLNS属性设置为所有子节点?

如果你想要XML:

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

…然后您需要确保您的Email, Home_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,具有更好的名称空间处理。)