我正在制作一个小程序,据说可以获得只能包含值的所有XML元素。例如(请参考下图), <Products>
虽然它是一个元素,但不应该显示它,因为它只包含所有其他可以包含值的元素,对于{ {1}} (突出显示的那个,对不起我的英语,但希望你能帮我们......)
从下图中,我的程序应该只选择以下元素:
<Description>
<Material_Number>
(2个元素,但不包括突出显示的元素)
<Description>
我实际得到的是什么......
请审核我的代码并提出建议:
<Language>
<Material_Type>
<Base_Unit>
答案 0 :(得分:0)
<Language>
元素中的文本值是文本节点。因此,inXmlNode.HasChildNodes
也会为这些节点评估true
。您必须检查是否有任何子节点的NodeType
属性设置为XmlNodeType.Element
,如果是,请跳过该元素。请注意,所选响应仅适用于特定情况。只要您的Xml文档包含<Language><x/></Language>
之类的内容,<Language>
元素就会出现在列表框中,即使它没有文本内容。如果Xml文档包含<Language><x/><y/><z/></Language>
,则<Language>
甚至会在结果集中出现三次。
答案 1 :(得分:0)
你可以稍微缩短你的代码但你应该开始调用从第一个元素开始。
GetElements(xmldoc.ChildNodes[0]);
void GetElements(XmlNode inXmlNode)
{
if(inXmlNode.HasChildNodes)
{
foreach (XmlNode childNode in inXmlNode.ChildNodes)
{
GetElements(childNode);
}
}
else
{
listBox1.Items.Add(inXmlNode.ParentNode.Name);
}
}