我想解析C#中网站的XML响应。响应的格式类似于以下内容:在C#XML中解析特定内容的XML
<Company>
<Owner>Bob</Owner>
<Contact>
<address> -1 Infinite Loop </address>
<phone>
<LandLine>(000) 555-5555</LandLine>
<Fax> (000) 555-5556 </Fax>
</phone>
<email> [email protected] </email>
</Contact>
</Company>
我想要的唯一信息是LandLine和传真号码。然而,我目前的做法似乎真的很差质量。本质上它是一堆嵌套的while循环,并检查元素名称,然后在找到正确的元素时读取内容。我正在使用类似下面的清单:
XmlReader xml = XmlReader.Create(websiteResultStream, xmlSettings);
while(xml.Read()){
if(xml.NodeType == XmlNodeType.Element){
if(xml.Name.ToString() == "Phone"){
while(xml.Read()) {
if(xml.NodeType == XmlNodeType.Element) {
if(xml.Name.ToString() == "LandLine"){
xml.MoveToContent();
xml.ReadContentAsString();
}
if(xml.Name.ToString() == "Fax"){
xml.MoveToContent();
xml.ReadContentAsString();
}
}
}
}
}
}
我是较新的XML/C#,但上述方法只是尖叫坏代码!我想确保如果结构发生变化(即,有另外的电话号码类型,如“移动”),代码是健壮的(因此,额外的while循环)
注意:上述C#代码不准确,缺乏一些检查等,但它展示了我目前令人厌恶的方法
如果简单地从这两个元素中提取内容,如果它们存在,最好/最干净的方法是什么?
这有效,但对于只读访问不是最佳选择。该示例使用'XmlDocument'在内存中构建完整的DOM树,这通常不需要。 – 2010-08-18 14:57:13