Correspondance xsl: template pour xml avec préfixes
-
06-07-2019 - |
Question
j'ai ce fichier 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>
Je dois faire correspondre les données contenues dans < patientAccountNumber > ;, qui se trouve dans < enterpriseClaim > ;, qui se trouve dans < bo: C837ClaimParent gt; J'ai essayé toutes les valeurs auxquelles je peux penser sur la correspondance xsl: template et je ne peux pas correspondre à ce nœud, il ne le trouve pas ou correspond à l'ensemble du fichier xml, mon fichier xsl se présente comme suit:
<?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>
Que dois-je spécifier sur mon modèle xsl: template et mon xsl: value-of?
De plus, pour ce même fichier, je vais faire correspondre d'autres valeurs, tout se trouve à l'intérieur du noeud principal < bo: C837ClaimParent, que dois-je utiliser pour pouvoir faire correspondre efficacement les noeuds de mon fichier? <
La solution
Il semble qu'il manque une déclaration d'espace de noms pour votre préfixe bo
. Cet espace de noms devra probablement apparaître dans votre solution, sauf si vous utilisez local-name()
modifier (après l'apparition de l'espace de nom!
<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>
Êtes-vous sûr que enterpriseClaim
se trouve dans un espace de nom différent de C837ClaimParent
?
Autres conseils
<xsl:stylesheet ... xmlns:bo="http://www.bo.org">
...
<xsl:value-of select="/bo:C837ClaimParent/enterpriseClaim/patientAccountNumber" />
...
</xsl:stylesheet>
En général, mon conseil serait de lire sur les espaces de noms XML et XPath.