2016-04-07 20 views
0

Aşağıdaki 'x' metninden 'testpoc' metnini çıkarmak zorundayım. Lütfen, aynı xpath değerini sağlayarak bana yardımcı olun.xml ad alanları ve çoklu etiketler bulunduğunda local-name() işlevini kullanarak xpath ifadesini değerlendirin

   '<am:entry>` `  
    `    <am:content type="application/xml">` 
        `<s:series-poc>` 
         '<s:c_series.c_id>testpoc</s:c_series.c_id>' 
        </s:series-poc>      
        </am:content> 
       </am:entry> 

Aşağıdaki yolları kullanmayı denedim ancak şans denemedim.

a) ("// * [yerel adı() = 'c_series.c_id']/metin()"),

b) ("/ giriş/içerik/seri POC/c_series. c_id/metin() "),

c) ("/giriş/içerik/seri POC // * [yerel adı() = 'c_series.c_id']/metin() ")

Bu konuda tüm desteğiniz için teşekkür ederiz.

cevap

0

Ardından local-name() güvenerek

Predicates son olan

/am:entry/am:content/s:c_series.c_id 
gibi içerikleri seçebilirsiniz örneğin,

XPath.declareNamespace("am", "http://something.com/"); 
XPath.declareNamespace("s", "http://something.else.com/"); 

bir URI bir ad öneki bağlanmasının bir yol vermelidir Kişisel XPath API önekleri bu şekilde bağlayamazsanız lütfen başvurunuz.

Hangi API'yi kullanıyorsunuz?

+0

Merhaba Michael, hızlı yanıtınız için teşekkürler. İsim alanlarını ve tüm xml'yi gönderdim. Ayrıca, xpath'ımı formüle etmeye çalıştığım kodu da yazdım, ancak ilgili metni ayıklamada hiç şans yoktu. –

0

size detayları sağlanması, ayrıca aşağıda xml kontrol -

kullanılan ad alanları: xmlns: c = "http://iddn.abc.com/ns/core" xmlns: "f = http: //iddn.abc.com/ns/fields "xmlns: a =" http://iddn.abc.com/ns/assets "xmlns: s =" http://iddn.abc.com/ns/search " c_series.c_id etiketi:>

 <atom:entry> 
     <atom:content type="application/vnd"> 
      <s:series-item-abc-poc> 
      <s:c_series.c_id>testpoc</s:c_series.c_id> 
      </s:series-item-abc-poc> 
     </atom:content> 
    </atom:entry> 

Ben ancak ben s için değerini alıp alamadığını, önerilen olarak ad alanları ilan çalıştı. Yaptığım şey buydu -

xpath = XPathFactory.newInstance(). NewXPath();

XPath.declareNamespace ("s", " http://iddn.abc.com/ns/search");

expr = xpath.compile ("// atom: entry/atom: content/s: series-item-abc-poc/s: c_series.c_id/text()");

Burada bir şeylerin eksik olması durumunda bana bildirin.

Bu konuda desteğiniz için teşekkür ederiz.

+0

Not, bu yanıt, XPath ifadesinin JAXP API kullanılarak bir Java uygulamasından çalıştırıldığı duruma yönelik bir çözüm sağlar. Sorunun, OP'in kullandığı programlama dili veya API olduğunu öne sürecek hiçbir şey yoktur. API'nın detaylarını öğrenmek için OP'den sordum, ama soruları anlamadıklarını düşünüyorum. –

+0

Lütfen bir önceki yorumu göz ardı edin: “Cevap” ı yanlış anladım, bunun aslında bir soruya eklendiğini fark etmem. Bu "cevap" orijinal soruya bir düzenleme olmalıydı. Kullandığınız API'nın Java JAXP API'sı olduğunu öne sürüyor.Doğru yaklaşımı kullanıyorsunuz, ama elbette "atom" ad alanını ve "s" ad alanını bildirmeniz gerekiyor. Sorunu çözme girişiminiz başarısız olursa, lütfen bunun nasıl başarısız olacağı konusunda daha kesin olun. –