J'utilise actuellement ColdFusion 10/11 et je suis encore relativement nouveau avec cette version. Je code normalement en PHP/C# donc le concept de l'utilisation d'un langage de script (si c'est ce que vous appelleriez), pour gérer les données en XML est un peu étrange pour moi. Si je pouvais reconcevoir l'application web en PHP, je le ferais malheureusement mais ce n'est pas une option pour le moment.Problème ColdFusion: lecture de la valeur de l'enfant XML en tant que chaîne vide
En ce qui concerne les plates-formes, je suis n'utilisant PAS Adobe ColdFusion Builder ou CF Administrator. J'utilise Dreamweaver et CFEclipse. Donc, maintenant je lis un fichier XML et je vérifie si l'enfant XML contient "oui", "non", etc. et affiche la balise correspondante. Cela a fonctionné correctement précédemment, mais je dois ajouter un nouvel enfant au fichier XML appelé "GNTrained". Après l'ajout du nouvel élément, il est toujours dit que la valeur est une chaîne vide. J'ai utilisé "structKeyExists" pour vérifier que l'enfant existe, mais la valeur est toujours vide. J'ai également vérifié qu'il lit le bon fichier XML. Les bonnes références de ColdFusion n'existent plus vraiment en ligne (même si je ne suis pas sûr qu'elles aient jamais existé), toute aide serait grandement appréciée!
Des idées pour lesquelles cela se produirait?
Partout ailleurs, l'emplacement XML serait délégué?
J'ai essayé plusieurs fois de le retravailler et je me demande toujours pourquoi la valeur est toujours une chaîne vide. J'ai essayé différentes valeurs, changé les éléments, tout et n'importe quoi pour que cela fonctionne. Par souci de mon travail, voici un exemple de code et non l'ensemble exact de code que j'utilise. Donc, si j'ai oublié quelque chose, s'il vous plaît faites le moi savoir. Cependant, c'est la version la plus simpliste du code et vraiment tout ce que je crois nécessaire pour résoudre ce problème.
Il existe 3 fichiers différents: le fichier d'affichage frontal, le fichier de requête et le fichier XML.
Voici le code de la page d'affichage:
<cfinclude template="#APPLICATION.root#employee/details/employee-query.cfm" />
<cfoutput>
<cfquery name="get_employee" dbtype="query">
SELECT id,name,GNTrained from session.employeeDetails order by name
</cfquery>
<cfloop query="get_employee">
<cfif tr eq "RowEven">
<cfset tr="RowOdd">
<cfelse>
<cfset tr="RowEven">
</cfif>
<li class="EmployeeRow #tr#" id="company_#get_employee.currentrow#">#htmleditformat(get_employee.name)#
<div id="bfeat_#get_employee.currentrow#" class="Hidden">
<div class="employeeGroup" style="width:371px;">
<ul class="EmpTrainingList">
<li>BBTrained:
<cfif get_employee.BBTrained contains "YES">
<span class="yes">#get_employee.BBTrained#</span>
<cfelse>
<span class="no">#get_employee.BBTrained#</span>
</cfif>
</li>
<li>GNTrained:
<cfif structKeyExists(get_employee, "GNTrained")>
<span style="color: red;"><strong>EXISTS! </strong></span>
<cfelse> DOES NOT EXIST!
</cfif>
<cfif get_employee.GNTrained contains "YES">
<span class="yes">#get_employee.GNTrained#</span>
<cfelseif get_employee.GNTrained contains "In Progress">
<span class="in-progress">#get_employee.GNTrained#</span>
<cfelseif get_employee.GNTrained eq "">
<span class="no">EMPTY</span>
<cfelse>
<span class="no">#get_employee.GNTrained#</span>
</cfif>
</li>
</ul>
</div>
</div>
</li>
</cfloop>
</cfoutput>
Voici le code pour la requête:
<cffile action="read" file="#ExpandPath('#application.root#cf_test/employeeDetails.xml')#" variable="myxml">
<cfset mydoc = XmlParse(myxml)>
<cfset apps = mydoc.data.XmlChildren>
<cfset size = ArrayLen(apps)>
<cfset session.employeeDetails = QueryNew("employee_id,employee_name,GNTrained") >
<cfset temp = QueryAddRow(session.employeeDetails, #size#)>
<cfloop index="i" from = "1" to = #size#>
<cfloop index="x" from="1" to="8">
<cfset attr_name = REReplace(#mydoc.data.employees[i].XMLChildren[x].xmlName#, "[^a-zA-Z0-9__]", "", "ALL") />
<cfset temp = QuerySetCell(session.employeeDetails, "#attr_name#",
#mydoc.data.employees[i].XMLChildren[x].xmlText#, #i#)>
</cfloop>
</cfloop>
<cfcatch>Error loading</cfcatch>
</cftry>
</cfoutput>
Voici le fichier XML:
<!---- File Name: employeeDetails.xml ---->
<?xml version="1.0" encoding="utf-8" ?>
<data>
<employees>
<name>John Smith</name>
<id>1234</id>
<BBTrained>NO</BBTrained>
<DEPT>21</DEPT>
<EXP>12</EXP>
<current>YES</current>
<Status>ACTIVE</Status>
<StateCode>CO122</StateCode>
<GNTrained>NO</GNTrained>
</employees>
<employees>
<name>Mary Chapman</name>
<id>3344</id>
<BBTrained>YES</BBTrained>
<DEPT>21</DEPT>
<EXP>18</EXP>
<Status>LOA</Status>
<StateCode>DE255</StateCode>
<GNTrained>YES</GNTrained>
</employees>
<employees>
<name>Alex Fisher</name>
<id>6655</id>
<BBTrained>NO</BBTrained>
<DEPT>22</DEPT>
<EXP>6</EXP>
<Status>ACTIVE</Status>
<StateCode>ME255</StateCode>
<GNTrained>YES</GNTrained>
</employees>
</data>
CODE MIS À JOUR - Inclut cfloop maintenant. (20/04/16)
** SOLUTION: ** Avec l'aide de SpliFF, j'ai été capable de trouver le problème. Sérieusement l'un des correctifs les plus faciles que j'ai rencontrés. Dans le code suivant sur la page de requête:
J'avais besoin de changer "8" à "9" pour expliquer le nouvel élément. Oui ... C'était vraiment ce petit changement.soupir
Je ne sais pas je suis tout à fait, mais il semble que vous lisez un fichier XML, l'analyser et utiliser les données pour remplir un objet de requête. Si oui, où est le code qui remplit la requête avec des données? Le code ci-dessus crée un objet de requête et ajoute des lignes * vides *, c'est-à-dire "QueryAddRow (session.employeeDetails, # size #)" mais ne remplit pas ces lignes. – Leigh
Oui, il semble que vous avez manqué la deuxième moitié de l'exemple dans la documentation: http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-6d1b.html. Vous devrez ajouter les fonctions 'cfloop' et' querySetCell' dans la boucle. – Chester
J'ai ajouté plus de code qui montre le cfloop. Donc hypothétiquement, disons que BBTrained s'est montré correctement, mais pas GNTrained. Y a-t-il quelque chose qui le ferait apparaître ou apparaître comme une chaîne vide alors que clairement ce n'est pas vide? ... –