2011-04-18 28 views
23

Estoy escribiendo Java en Android para recuperar datos del archivo XML, pero tengo un problema. Considere este XML:Xpath usando la función starts-with

<ITEM> 
    <REVENUE_YEAR>2554-02</REVENUE_YEAR> 
    <REGION>Central</REGION> 
</ITEM> 
<ITEM> 
    <REVENUE_YEAR>2552-02</REVENUE_YEAR> 
    <REGION>Central</REGION> 
</ITEM> 
<ITEM> 
    <REVENUE_YEAR>2552-03</REVENUE_YEAR> 
    <REGION>Central</REGION> 
</ITEM> 

¿Cómo puedo obtener todos los elementos en años que comienzan con 2552.-Probé:

//REVENUE_YEAR[starts-with(.,'2552')]/text() 

Funciona, pero cuando intenté:

//REVENUE_YEAR[starts-with(.,'2552')]/REGION/text() 

no funciona

Respuesta

39

Uso:

/*/ITEM[starts-with(REVENUE_YEAR,'2552')]/REGION 

Nota: A menos que su lengua de acogida no puede manejar ejemplo como elemento de resultado, no utilice texto linfáticos, especialmente en el modelo de datos de contenido mixto. No inicie expresiones con el operador // cuando el esquema es bien conocido.

+0

Yo no lo entiendo ... ¿por qué utilizar/*/nuevo? Acabo de tener un problema similar con XPath en Selenium y agregué el * en lugar de mi // inicial y también funciona: GetByxPath (string.Format ("/ */tbody [@ id = 'someContainer']/tr/td [ 1]/a (starts-with (@href, {0}) ","/Customers/")); – PositiveGuy

+0

Velocidad. // es muy lenta. Siempre quiere buscar desde arriba si puede porque es mucho más rápido. – PRMan

5

Uso:

//REVENUE_YEAR[starts-with(.,'2552')]/../REGION/text() 
2

probar este

//ITEM/*[starts-with(text(),'2552')]/following-sibling::* 
+4

Una respuesta con una explicación, como [esto] (http://stackoverflow.com/a/5705866/1677912) es mejor (y obtiene más votos) que un simple "prueba esto" como [que] (http: //stackoverflow.com/a/17786221/1677912). – Mogsdad