Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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
使用.Net检测XML中两种形式的空元素_.net_Xml_Xmlreader - Fatal编程技术网

使用.Net检测XML中两种形式的空元素

使用.Net检测XML中两种形式的空元素,.net,xml,xmlreader,.net,Xml,Xmlreader,在.Net中解析XML时遇到了一个问题,我需要能够检测出空元素的哪种形式,但似乎无法使其正常工作。基本上,我正在解析的XML格式中,以下两个片段应该进行不同的解析: <sometag /> 及 我的问题是.Net似乎没有为我提供任何方法来确定上述两者之间的差异 使用基于DOM的解析,XmlNode将报告InnerText和InnerXml以及OuterXml属性的“”””,无论输入XML如何,都会扩展到第二种形式,因此无法基于此进行检测 使用基于XmlReader的解析,两

在.Net中解析XML时遇到了一个问题,我需要能够检测出空元素的哪种形式,但似乎无法使其正常工作。基本上,我正在解析的XML格式中,以下两个片段应该进行不同的解析:

<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);
    }
}