C# XmlElement HasChildNodes属性定义
假设您有以下XML结构:C# XmlElement HasChildNodes属性定义,c#,.net,xml,xmldocument,C#,.net,Xml,Xmldocument,假设您有以下XML结构: <Class> <Worker> <Name> Dan </Name> <Phone> 123 </Phone> <Class> <Address> <Street> ye
<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中,类
元素是一个具有三个子节点的节点,一个文本节点包含
标记前的空格,地址
元素本身,另一个文本节点包含
和
之间的空格。