Cómo utilizar jQuery para el análisis XML con espacios de nombres
Soy nuevo en jQuery y me gustaría analizar un documento XML.
Puedo analizar XML normal con los espacios de nombres predeterminados pero con XML como:
<xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema">
<s:Schema id="RowsetSchema">
<s:ElementType name="row" content="eltOnly" rs:CommandTimeout="30">
<s:AttributeType name="ows_ID" rs:name="ID" rs:number="1">
<s:datatype dt:type="i4" dt:maxLength="4" />
</s:AttributeType>
<s:AttributeType name="ows_DocIcon" rs:name="Type" rs:number="2">
<s:datatype dt:type="string" dt:maxLength="512" />
</s:AttributeType>
<s:AttributeType name="ows_LinkTitle" rs:name="Title" rs:number="3">
<s:datatype dt:type="string" dt:maxLength="512" />
</s:AttributeType>
<s:AttributeType name="ows_ServiceCategory" rs:name="Service Category" rs:number="4">
<s:datatype dt:type="string" dt:maxLength="512" />
</s:AttributeType>
</s:ElementType>
</s:Schema>
<rs:data>
<z:row ows_ID="2" ows_LinkTitle="Sample Data 1" />
<z:row ows_ID="3" ows_LinkTitle="Sample Data 2" />
<z:row ows_ID="4" ows_LinkTitle="Sample Data 3" />
</rs:data>
</xml>
Todo lo que realmente quiero es el<z:row>
.
Hasta ahora he estado usando:
$.get(xmlPath, {}, function(xml) {
$("rs:data", xml).find("z:row").each(function(i) {
alert("found zrow");
});
}, "xml");
Realmente sin suerte. ¿Algunas ideas?
Lo tengo.
Resulta que es necesario \\
escapar del colon.
$.get(xmlPath, {}, function(xml) {
$("rs\\:data", xml).find("z\\:row").each(function(i) {
alert("found zrow");
});
}, "xml");
Como señaló Rich:
La mejor solución no requiere escape y funciona en todos los navegadores "modernos":
.find("[nodeName=z:row]")
He pasado varias horas leyendo sobre complementos y todo tipo de soluciones sin suerte.
ArnisAndy publicó un enlace a una discusión sobre jQuery, donde se ofrece esta respuesta y puedo confirmar que esto funciona para mí en Chrome (v18.0), Firefox (v11.0), IE (v9.08) y Safari (v5.1.5). ) usando jQuery (v1.7.2).
Estoy intentando extraer un feed de WordPress donde el contenido se llama <content:encoded> y esto es lo que funcionó para mí:
content: $this.find("content\\:encoded, encoded").text()
Si está utilizando jquery 1.5, tendrá que agregar comillas alrededor del valor del atributo del selector de nodo para que funcione:
.find('[nodeName="z:row"]')
Aunque la respuesta anterior parece correcta, no funciona en navegadores webkit (Safari, Chrome). Una mejor solución creo que sería:
.find("[nodeName=z:myRow, myRow]")