Forum Discussion
I don't know if that can help but i access to my nodes by xpath when we already know the path used, using the function below.
Call sample is
/* ---------------------------------------------------------------------------
Vérification dans le fichier xml d'export
--------------------------------------------------------------------------- */
function CheckExportValue(pIdx, pValue)
{
var iRet = 0;
try {
var EnvLogName = Query_SQL_ADO("select ENVLOGNAME from FMENV where BATIDX = " + pIdx).Lines[0];
var XMLFile = _CheminExport + '\\' + EnvLogName + '_' + pIdx + '.XML';
iRet = CheckXMLNodeValue(XMLFile, "//ENVELOPE_CONTENT/BATCH/CLB_DESC", pValue);
}
catch(e) {
LogExceptionByLevel(e, "Error", "CheckExportValue(" + pIdx + ", " + pValue + ") ");
iRet = 1;
}
finally {
return iRet;
}
}
for an xml having:
<?xml version="1.0" encoding="UTF-8"?>
<!--Itesoft.Freemind Enterprise XML file created using FreeMind Data.-->
<ENVELOPE_CONTENT>
<VERSION>2.5.3</VERSION>
<BATCH>
<IDX>2</IDX>
<ENTITY_PRIORITY>5</ENTITY_PRIORITY>
<CLB_COD>DEFAULT_BATCH</CLB_COD>
<CLB_DESC>Lot par défaut</CLB_DESC>
<RECEPTION_DATE>2013-02-22</RECEPTION_DATE>
<PRIORITY>5</PRIORITY>
<CONFIDENTIALITY></CONFIDENTIALITY>
<SOURCE_CAPTURE>FILE</SOURCE_CAPTURE>
<STRUCTURE>VARIABLE</STRUCTURE>
<REJECT_MESSAGES>
</REJECT_MESSAGES>
<INDEXES>
</INDEXES>
</BATCH>
<ENVELOPE>
<IDX>2</IDX>
<ENTITY_PRIORITY>5</ENTITY_PRIORITY>
<CLE_COD>DEFAULT_ENVELOPE</CLE_COD>
<CLE_DESC>Pli par défaut</CLE_DESC>
<RECIPIENT></RECIPIENT>
<COMMENT></COMMENT>
<REJECT_MESSAGES>
</REJECT_MESSAGES>
<INDEXES>
</INDEXES>
</ENVELOPE>
<DOCUMENTS>
<DOCUMENT>
<IDX>2</IDX>
<ENTITY_PRIORITY>5</ENTITY_PRIORITY>
<CLD_COD>SLESYS_MISC</CLD_COD>
<CLD_DESC>Divers</CLD_DESC>
<CATEGORY>OTHER</CATEGORY>
<TIF_FILENAME>divers_2_si.tif</TIF_FILENAME>
<COMMENT></COMMENT>
<REJECT_MESSAGES>
</REJECT_MESSAGES>
<INDEXES>
</INDEXES>
</DOCUMENT>
</DOCUMENTS>
</ENVELOPE_CONTENT>
The function is here:
/* ---------------------------------------------------------------------------------------
Vérifier la valeur d'un noeud XML
Nécessite:
MSXML6 présent dans le système.
Paramètres:
[String] pXMLFile : Nom complet du fichier XML à vérifier.
[String] pNode : Requête XPATH de la valeur de noeud à tester.
[String] pValue : Valeur à tester.
Retour:
(Integer) 0 si test ok, 1 si erreur, un log d'erreur est généré dans ce cas.
------------------------------------------------------------------------------------ */
function CheckXMLNodeValue(pXMLFile, pNode, pValue)
{
var iRet = 0;
try {
// Création objet COM avec MSXML6 et charger le fichier
var Doc, s;
Doc = Sys.OleObject("Msxml2.DOMDocument.6.0");
Doc.async = false;
Doc.load(pXMLFile);
// Contrôle validité XML
if (Doc.parseError.errorCode != 0) {
s = "Echec ouverture XML" + "\n" +
"Raison:\t" + Doc.parseError.reason + "\n" +
"Ligne:\t" + aqConvert.VarToStr(Doc.parseError.line) + "\n" +
"Pos:\t" + aqConvert.VarToStr(Doc.parseError.linePos) + "\n" +
"Source:\t" + Doc.parseError.srcText;
throw new Error(s);
}
// Accès au noeud par XPath
var Nodes = Doc.selectNodes(pNode);
if (Nodes.item(0).text != pValue)
throw new Error('La valeur "' + Nodes.item(0).text + '" est différente de la valeur attendue "' + pValue + '" dans le fichier "' + pXMLFile + '".')
else
Log.Message('La valeur "' + Nodes.item(0).text + '" est bien la valeur attendue "' + pValue + '" dans le fichier "' + pXMLFile + '".')
}
catch(e) {
LogExceptionByLevel(e, "Error", "CheckXMLNodeValue(" + pXMLFile + ", " + pNode + ", " + pValue + ")");
iRet = 1;
}
finally {
return iRet;
}
}
Related Content
- 5 years ago
- 5 years ago
Recent Discussions
- 18 hours ago
- 18 hours ago
- 5 days ago