我有一个包含另一个类的嵌套列表的类,如下所示:
sub("?(.*\\s)?(\\d.*?\\s).*","\\2",a)
[1] "11-010 " "21 " "03-11-11
regmatches(a,regexpr("\\d.*?\\s",a))
[1] "11-010 " "21 " "03-11-11 "
当我尝试序列化public class Departement {
[XmlElement (Namespace = "http://tempuri.org/")]
string Id;
[XmlElement (Namespace = "http://tempuri.org/")]
List<Student> listStident = new List<Student> ();
}
public class Student
{
[XmlElement (Namespace = "http://tempuri.org/")]
string firstName;
[XmlElement (Namespace = "http://tempuri.org/")]
string lastName;
}
的数组时,我得到一个像这样的xml:
Departement
没有为嵌套元素生成名称空间属性。我用来序列化的代码是:
<ArrayOfDepartement xmlns="http://www.w3...">
<Departement>
<id xmlns== "http://tempuri.org/">1234567890</id>
<Student xmlns== "http://tempuri.org/">
<firstName>med</firstName>
<lastName>ali</lastName>
</Student>
<Student xmlns== "http://tempuri.org/">
<firstName>joe</firstName>
<lastName>doe</lastName>
</Student>
</Departement>
</ArrayOfDepartement>
答案 0 :(得分:3)
XML命名空间规范in section 6.1声明:
声明前缀的名称空间声明的范围从它出现的start-tag的开头延伸到相应的end-tag的末尾,不包括具有相同NSAttName部分的任何内部声明的范围。对于空标记,范围是标记本身。
此类名称空间声明适用于其范围内与声明中指定的前缀匹配的所有元素和属性名称。
因此,数据结构在嵌套的xmlns="http://tempuri.org/"
和firstName
元素上没有重复的lastName
属性序列化,因为它们将是多余的。 id
和每个Student
元素具有自己的xmlns
属性的原因是它们是兄弟,形成不相交的命名空间声明范围。
换句话说,您的代码生成的XML是正确的并且符合预期。如果嵌套元素上有额外的xmlns
属性,则它没有语义效果。我会更关心的是,您没有序列化特定的根类,而是简单Departement[]
(除非它仅用于调试/实验目的)。