使用.Net检测XML中两种形式的空元素
在.Net中解析XML时遇到了一个问题,我需要能够检测出空元素的哪种形式,但似乎无法使其正常工作。基本上,我正在解析的XML格式中,以下两个片段应该进行不同的解析:使用.Net检测XML中两种形式的空元素,.net,xml,xmlreader,.net,Xml,Xmlreader,在.Net中解析XML时遇到了一个问题,我需要能够检测出空元素的哪种形式,但似乎无法使其正常工作。基本上,我正在解析的XML格式中,以下两个片段应该进行不同的解析: <sometag /> 及 我的问题是.Net似乎没有为我提供任何方法来确定上述两者之间的差异 使用基于DOM的解析,XmlNode将报告InnerText和InnerXml以及OuterXml属性的“”””,无论输入XML如何,都会扩展到第二种形式,因此无法基于此进行检测 使用基于XmlReader的解析,两
<sometag />
及
我的问题是.Net似乎没有为我提供任何方法来确定上述两者之间的差异
使用基于DOM的解析,XmlNode
将报告InnerText
和InnerXml
以及OuterXml
属性的“”””,无论输入XML如何,都会扩展到第二种形式,因此无法基于此进行检测
使用基于XmlReader
的解析,两种表单都将IsEmptyElement
报告为true
,我看不到任何其他用于检测此情况的属性
任何人都知道在基于DOM的解析中检测这种情况的任何方法在第一种情况下
IsEmptyElement
在您位于起始元素时返回true
,在第二种情况下返回false
:
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element && reader.Name == "sometag")
{
// prints true if <sometag/> and false if <sometag></sometag>
Console.WriteLine(reader.IsEmptyElement);
}
}
while(reader.Read())
{
if(reader.NodeType==XmlNodeType.Element&&reader.Name==“sometag”)
{
//如果为真,则打印为假
Console.WriteLine(reader.IsEmptyElement);
}
}
更正了我的问题,您是对的,这确实适用于基于XmlReader
的解析,如果能够检测到基于DOM的解析的相同情况,那就太好了请原谅我的无知,但什么是基于DOM的解析?Document Object Model=DOM。如果您使用的是XmlDocument
类,那么.Net将把整个XML文档转换成一个对象树,这取决于您的XML格式,可以使解析更容易,因为您可以在数据中自由移动,而不是只向前移动。缺点是,它需要的内存远远超过XmlReader
解析,尤其是在有大型XML文件的情况下
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element && reader.Name == "sometag")
{
// prints true if <sometag/> and false if <sometag></sometag>
Console.WriteLine(reader.IsEmptyElement);
}
}