2010-01-04 18 views
7

Aşağıdaki .NET C# windows hizmeti tarafından okunan geçerli bir XML dosyanız var. soru (u1_000) etiket kesinlikle elemanda geçerli: etiketiyle Kitap eleman bulamaz nedense getElementByID'ye()GetElementById() etiketi bulamadınız mı?

<book id="u1_000" category="xyz"> 

var mı? -

XmlDocument doc = new XmlDocument(); 
doc.Load("C:\\j.xml"); 
XmlElement ee = doc.GetElementById("U1_000"); 

<book id="U1_000" category="web"> 
+0

XML belgenizi (veya bir örnek) gönderebilir misiniz? Kimliğin doktrinde ne olduğunu mu kuruyorsunuz? –

+0

aslında, doc türünde yok - Buna bakacağım. Id belirten düşünce enuf oldu (- teşekkürler – Chris

+0

Hayır, öznitelik adı "id" hakkında bir büyü yoktur. "Xml: id", diğer taraftan ... http://www.w3.org/TR/ xml-id/ – bobince

cevap

4

başka bir şey, belki bir yedek olarak xpath kullanıyorsanız:

string id = "u1_000"; 
string query = string.Format("//*[@id='{0}']", id); // or "//book[@id='{0}']" 
XmlElement el = (XmlElement)doc.SelectSingleNode(query); 
+0

Teşekkürler Marc, Bu rotaya gideceğim, harika bir fikir, Anthony'ye de teşekkürler. – Chris

3

MSDN documentation for this method'u kontrol edin. Aşağıdaki örnekte, kimliğin DOCTYPE'yi nasıl kullandığını nasıl belirlediğini görebilirsiniz. Bu sizin için sorunu çözebilir.

3

Sen benzersiz kimliği consitute olur elemanlarında hangi özellik kurmak için bir DTD gerekir. XML'de, id özniteliğinin benzersiz bir öğe kimliği olarak ele alınması gerektiğini otomatik olarak varsaymaz.

Genel olarak "unDTDed" XML'de getElementById çok kullanışlı değildir. Eğer

XmlElement book = (XmlElement)doc.DocumentElement.SelectSingleNode("book[@ID='U1_000']"); 

-: Bu çoğu durumda işleniyor XML dosyasının yapısı dolayısıyla tipik erişim Böyle bir şey olmazdı (örneğin kök öğesi book unsurların bir dizi içerir books denir) anlaşılmaktadır Gerçekten XML yapısını ve/veya elementin etiket adını bilmiyorum, Marcs cevabında açıklanan kaba kuvvet araması işe yarayacaktır.