Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XmlElement HasChildNodes属性定义_C#_.net_Xml_Xmldocument - Fatal编程技术网

C# XmlElement HasChildNodes属性定义

C# XmlElement HasChildNodes属性定义,c#,.net,xml,xmldocument,C#,.net,Xml,Xmldocument,假设您有以下XML结构: <Class> <Worker> <Name> Dan </Name> <Phone> 123 </Phone> <Class> <Address> <Street> ye

假设您有以下XML结构:

<Class>
       <Worker>
              <Name> Dan </Name>
              <Phone> 123 </Phone> 
                <Class>
                     <Address>
                        <Street> yellow brick road </Street>
                        <Zip Code> 123456 </Zip Code>
                     </Address>
                </Class>
         </Worker>
 </Class>   

丹
123
黄砖路
123456
使用
xmlement
,我的问题是
元素的
HasChildNodes
属性返回true,而我希望它返回false

根据我的定义,
HasChildNodes
应该是这样的:
有子节点,
也有子节点,但是
没有子节点,而是有一个值

如何区分这些情况?是否还有另一个属性具有我期望的行为?

这是因为
Name
元素中的“Dan”值被视为子节点


也许您可以测试
xmlement
是否只有
XMLText
子节点,或者它是否没有
xmlement
子节点?

在DOM术语中,字符内容表示为文本节点,因此只有完全空的元素节点(
)才会没有子节点。您必须检查所有子节点,以查看其中是否有
XMLElement

以下是vb.net中的一个代码,用于检查节点是否实际具有xml子元素

Function hasXmlChildElements(ByVal node As XmlNode) As Boolean
            If node.HasChildNodes AndAlso node.ChildNodes.Count = 1 AndAlso node.FirstChild.GetType.Name.ToUpper = "XMLTEXT" Then
                Return False
            End If
            Return node.HasChildNodes
    End Function

@Downvoter:不知道答案,但知道如何进行Downvoter??很好的解决方案,您知道为什么在C#中使用xml的一切都很困难,并且与任何正常逻辑相矛盾。我需要这个用于递归,所以想象一下,除了简单的结束语句之外,我还应该做些什么。顺便说一下,你回答了我的另一个问题,我和你一起思考过。Thanks@JavaSa在这种情况下,这不是C的错——DOMAPI接口是W3C规范的一个(系列),由委员会设计,可以用多种不同的编程语言(Java、.NET、JavaScript等)实现。因为DOM在所有语言中的工作原理都是一样的,所以它往往非常“笨重”,不太符合其中任何一种语言的正常习惯用法。因此,除了官方的W3CDOM之外,大多数语言都有对特定语言更自然的替代模型,例如Java中的JDOM或XOM。@JavaSa。。。或者在C#中。另一个问题是,你知道如何识别
,换句话说,
XmlElement
的结尾吗?@JavaSa在DOM中没有这样的标记表示,它只是树结构的抽象模型。在问题中的示例XML中,
元素是一个具有三个子节点的节点,一个文本节点包含
标记前的空格,
地址
元素本身,另一个文本节点包含
之间的空格。