xsl: coincidencia de plantilla para xml con prefijos
-
06-07-2019 - |
Pregunta
Tengo este archivo xml
<?xml version="1.0" encoding="UTF-8"?>
<bo:C837ClaimParent xsi:type="bo:C837ClaimParent"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:bo="http://somelongpathHere/process/bo">
<claimAux>
...
</claimAux>
<enterpriseClaim>
...
<patientAccountNumber>data to capture here</patientAccountNumber>
</enterpriseClaim>
Necesito hacer coincidir los datos dentro de < patientAccountNumber > ;, que está dentro de < enterpriseClaim > ;, que está dentro de < bo: C837ClaimParent gt; He probado todos los valores que puedo pensar en xsl: template match y no puedo hacer coincidir ese nodo, o no lo encuentra o coincide con el archivo xml completo, mi archivo xsl tiene el siguiente aspecto:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="2.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<html>
....
<div>
<xsl:value-of select="C837ClaimParent/enterpriseClaim/patientAccountNumber" /></div>
¿Qué debo especificar en mi xsl: template y mi xsl: value-of?
también, para este mismo archivo estaré haciendo coincidir otros valores, todo está dentro del nodo principal < bo: C837ClaimParent, entonces, ¿qué necesito usar para poder hacer coincidir eficientemente los nodos en todo mi archivo?
Solución
Parece que le falta una declaración de espacio de nombres para su prefijo bo
. Este espacio de nombres probablemente tendrá que aparecer en su solución a menos que use local-name()
editar (¡después de que apareció el espacio de nombres!
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:bo="http://somelongpathHere/process/bo">
<xsl:output method="xml" version="2.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<html>
....
<div>
<xsl:value-of select="bo:C837ClaimParent/enterpriseClaim/patientAccountNumber" /></div>
¿Está seguro de que enterpriseClaim
está en un espacio de nombres diferente de C837ClaimParent
?
Otros consejos
<xsl:stylesheet ... xmlns:bo="http://www.bo.org">
...
<xsl:value-of select="/bo:C837ClaimParent/enterpriseClaim/patientAccountNumber" />
...
</xsl:stylesheet>
En general, mi consejo sería leer sobre espacios de nombres en XML y XPath.