2010-12-14 18 views
75

Amacım, birden fazla xml dosyasından belirli düğümleri XPath kullanarak birden fazla ad alanına sahip olmaktır. Ad alanı URI'lerini bildiğim sürece her şey iyi çalışıyor. Ad alanı adının kendisi sabit kalır, ancak Schemas (XSD) bazen istemci tarafından üretilir, yani benim için bilinmez. O zaman temel olarak üç seçenek kaldım: Ad alanı için
XPath ile ad alanlarını nasıl görmezden gelinirsiniz

  1. kullanımı sadece bir şema, hiçbir şey umuduyla ters giderse (? I emin olabilir)

  2. çocuklara belgenin düğümleri almak ve Bir isim-alanı URI'sine sahip olan ilk düğümü arayın ve orada URI'yı kullanın, doğru olanı umuyoruz. "Bak, ben sadece bu isimde TÜM düğümleri bulmak, ad alanları hakkında ilgilendirmiyor, ben bile sana ad adını söyleyebilir, adil değil URI": Birden nedenlerle bir türlü

  3. xpath anlatmak
    için yanlış gidebilir . here veya here bulunduğu gibi sorulara "i ad bilinci farkında değilim çünkü benim xpath ifadesi doesnt work" Bu, burada soru ...

Bu sayısız bir reiteration değil mi. Ad alanı bilincini nasıl kullanacağımı biliyorum. Sadece ondan kurtulmak için değil.

+2

Şemaları bilmiyorsanız, hangi öğeleri istediğinizi nasıl biliyorsunuz? –

+3

[Xml ile XML belgesi ayrıştırılırken ad alanı nasıl yok sayılır] 'ın tam kopyası (http://stackoverflow.com/questions/4402310/how-to-ignore-namespace-when-parsing-xml-document-with-xpath) –

+0

İşaret ettiğin için teşekkürler, Alejandro. "Gözden geçirme namespace xpath" için arama bu bir tane ortaya koymuş olmalıydı, ama – kostja

cevap

113

local-name() XPath işlevini kullanabilirsiniz. Bir daha az XPath2.0 aynı yapabileceği

/path/to/*[local-name() = 'somenode'] 
+6

Ayrıca, ad-habersiz bir şekilde, niteliklere başvurmak için 'local-name()' de kullanabilirsiniz, bkz: http://stackoverflow.com/q/21239181/274677 –

+0

Bir göz atın bu eğitimde: http://www.codesimplify.com/java/java-xpath-ignore-namespace-example/ – hipokito

9

: Bunun yerine doğru yerel adla biri için bütün düğümleri ve filtreyi seçebilirsiniz

/path/to/x:somenode 

gibi bir düğüm seçme ayrıntılı sözdizimi:

/path/to/*:somenode 
İlgili konular