2010-03-18 30 views
2

我使用C#,我很難過。它只是不支持id()?我有一個大的XML文件,大約4-5KB的文件在〜400kb,所以我需要一些速度和性能,只要我能得到它。C#XPath id()不工作?

我使用XmlDocument.SelectSingleNode(「id('blahblahblah')」),它沒有通過id獲取節點。我瘋了還是C#XPath不支持id()?

回答

4

使用XmlDocument.GetElementById獲得與指定ID的XmlElement的,如:

XmlElement elem = doc.GetElementById("blahblahblah"); 

這僅適用於文檔指定一個DTD,但:

屬性名稱爲 「ID」 都沒有的鍵入ID,除非在DTD中定義。


如果您的文檔沒有DTD,您可以使用XPath表達式與ID屬性設爲您的ID選擇節點:

XmlElement elem = doc.SelectSingleNode("//*[@id='blahblahblah']"); 
+1

+1用於說明id()函數與DTD中的相應引用相關聯。 – Cerebrus 2010-03-18 09:20:14

+0

我將如何參考DTD?我的意思是我知道如何去做,我只是想確保它能夠工作,所以我也不妨問這個問題。我發現這一點: <根 的xmlns:的xsi = 「http://www.w3.org/2001/XMLSchema-instance」 的xsi:noNamespaceSchemaLocation = 「d:\ Untitled1.xsd」> <文件ID = 「F001」title =「abc」size =「123」/> 在Untitled1.xsd模式中(爲了清楚起見,刪除了)id屬性被聲明爲xs:ID。 那麼Untitles1.xsd會是什麼? http://www.tkachenko.com/blog/archives/000060.html 呃。嘿,如何BB – Iggyhopper 2010-03-18 09:44:57

1
xmlDocument.GetElementById("blahblahblah") 

可能是更好的選擇。

0

「正式」 的XPath recommendation說:

id函數選擇可以通過唯一的ID元件

元素節點可以具有一個唯一的標識符(ID )。這是在DTD中聲明爲類型ID的屬性的值。文檔中沒有兩個元素可能具有相同的唯一ID。如果XML處理器報告文檔中的兩個元素具有相同的唯一ID(只有在文檔無效的情況下才有可能),那麼文檔順序中的第二個元素必須被視爲不具有唯一ID。

注意:如果文檔沒有DTD,則文檔中沒有元素將具有唯一ID。