String xml1 =
@"<resultset>
<result>
<alamakota />
</result>
</resultset>";
String xml2 =
@"<resultset/>";
XmlDocument xDoc = new XmlDocument();
xDoc.LoadXml(xml1);
XmlNodeList nodes1 = xDoc.SelectNodes("/resultset/result");
xDoc.LoadXml(xml2);
XmlNodeList nodes2 = xDoc.SelectNodes("/resultset/result");
Console.WriteLine(nodes1.Count);
Console.WriteLine(nodes2.Count);
類似於第一個代碼,我會期望的WriteLine方法給出了1和0,但並非總是如此。在正常的程序運行時,它會產生雙倍的0.另外在調試時,我在第二個SelectNodes上放置斷點並檢查節點1的值。在VS中計算它在末尾給我1和0。看來的SelectNodes是XmlNodeList中的第一次檢查期間評估,不符合它在哪裏的代碼,例如下面的代碼將在1和0,每次給它運行
String xml1 =
@"<resultset>
<result>
<alamakota />
</result>
</resultset>";
String xml2 =
@"<resultset/>";
XmlDocument xDoc = new XmlDocument();
xDoc.LoadXml(xml1);
XmlNodeList nodes1 = xDoc.SelectNodes("/resultset/result");
Int32 c1 = nodes1.Count;
xDoc.LoadXml(xml2);
XmlNodeList nodes2 = xDoc.SelectNodes("/resultset/result");
Console.WriteLine(nodes1.Count);
Console.WriteLine(nodes2.Count);
我知道我能做到XDOC =新XmlDocument()在第一個SelectNodes之後,它會像預期的那樣工作,但我不知道它是如何工作的,因爲我無法在msdn上找到這個場景。如果是,那爲什麼?請給我指點一些文檔。
出於興趣,是否有任何理由不能使用LINQ to XML?這通常是一個更清潔的API來處理XML ... –
技術上沒有。這是我的選擇,因爲我在其他LINQ不可用的系統中使用XPath。 – pen2
@ pen2 - 您可以將XPath與LINQ to XML一起使用。請參閱例如[如何使用XPath與XElement或LINQ?](https://stackoverflow.com/questions/3642829/how-to-use-xpath-with-xelement-or-linq)。 – dbc