<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SetNationalList xmlns="http://www.lge.com/ddc">
<nationalList>
<portnumber>6000</portnumber>
<slaveaddress>7000</slaveaddress>
<flagzone>2</flagzone>
<flagindivisual>5</flagindivisual>
<flagdimming>3</flagdimming>
<flagpattern>6</flagpattern>
<flaggroup>9</flaggroup>
</nationalList>
</SetNationalList>
</s:Body>
</s:Envelope>
XDocument xdoc = XDocument.Parse(xml);
foreach (XElement element in xdoc.Descendants("nationalList"))
{
MessageBox.Show(element.ToString());
}
我想遍历nationalList
下的每个节点,但它不适用于我,它完全跳过foreach
循环。我在这里做错了什么?
答案 0 :(得分:75)
您没有包含名称空间,"http://www.lge.com/ddc"
,默认来自父元素:
XNamespace ns = "http://www.lge.com/ddc";
foreach (XElement element in xdoc.Descendants(ns + "nationalList"))
{
...
}
答案 1 :(得分:6)
您必须使用命名空间:
XNameSpace ns = "http://www.lge.com/ddc";
foreach (XElement element in xdoc.Descendants(ns + "nationalList")
{
MessageBox.Show(element.ToString());
}
答案 2 :(得分:2)
如果您不想在所有选择器中使用ns前缀,则还可以在解析xml时提前删除命名空间。例如:
XNamespace ns = "http://www.lge.com/ddc";
XDocument xdoc = XDocument.Parse(xml.Replace(ns, string.Empty));
foreach (XElement element in xdoc.Descendants("nationalList")
...
答案 3 :(得分:-3)
您必须包含命名空间是正确的,但上面的示例不起作用,除非您将命名空间放在大括号中:
XNameSpace ns = "http://www.lge.com/ddc";
foreach (XElement element in xdoc.Descendants("{" + ns + "}nationalList")
{
MessageBox.Show(element.ToString());
}
问候 基督教