XML: Return an empty matrix rather than an empty string when an attribute does not... 24/4824/2
Calixte DENIZET [Thu, 1 Sep 2011 16:02:27 +0000 (18:02 +0200)]
Change-Id: Ie012133b1caf97a76b1e7dc4013309435cada4ed

scilab/modules/xml/sci_gateway/cpp/sci_percent_XMLAttr_e.cpp
scilab/modules/xml/src/cpp/extraction.hpp
scilab/modules/xml/tests/unit_tests/xmlXpath.dia.ref
scilab/modules/xml/tests/unit_tests/xmlXpath.tst

index 537f4dd..7670db6 100644 (file)
@@ -122,10 +122,13 @@ int sci_percent_XMLAttr_e(char * fname, unsigned long fname_len)
 
     if (!value)
     {
-        value = "";
+        err = createMatrixOfDouble(pvApiCtx, Rhs + 1, 0, 0, 0);
+    }
+    else
+    {
+        err = createMatrixOfString(pvApiCtx, Rhs + 1, 1, 1, const_cast<const char * const *>(&value));
     }
 
-    err = createMatrixOfString(pvApiCtx, Rhs + 1, 1, 1, const_cast<const char * const *>(&value));
     if (err.iErr)
     {
         printError(&err, 0);
index ea52a49..e7c3bc9 100644 (file)
@@ -213,21 +213,6 @@ int createVariableOnStack(char * fname, XMLNs & ns, const char * field, int pos)
 /*--------------------------------------------------------------------------*/
 
 /**
- * Creates a new variable on stack according to the requested field
- * @param fname the function name
- * @param attr the attributes
- * @param field the field name
- * @param pos the stack position
- * @return 1 if all is ok, else 0
- */
-int createVariableOnStack(char * fname, XMLAttr & attr, const char * field, int pos)
-{
-    const char * value = attr.getAttributeValue(field);
-    return createStringOnStack(fname, value, pos);
-}
-/*--------------------------------------------------------------------------*/
-
-/**
  * Function to handle extraction in different XMLObjects
  * @param fname the function name
  * @param fname_len the function name length
@@ -239,7 +224,7 @@ int sci_extraction(char * fname, unsigned long fname_len)
     int id;
     SciErr err;
     int * fieldaddr = 0;
-    int *mlistaddr = 0;
+    int * mlistaddr = 0;
     char * field = 0;
     int ret;
 
index fa70fdd..7d98b1f 100644 (file)
@@ -14,6 +14,7 @@ assert_checkequal(titles(5).name,"title");
 assert_checkequal(titles(5).content,"Scilab rox");
 assert_checkequal(titles(5).type,"XML_ELEMENT_NODE");
 attribs=titles(4).attributes;
+assert_checkequal(titles(4).attributes.size,[]);
 assert_checkequal(attribs.lang,"en");
 // Get all the books where the price is more than 35 euros
 moreThan35eList=xmlXPath(xmlFile,"/bookstore/book[price>35]/title");
index a4c3b0d..58e35b2 100644 (file)
@@ -16,6 +16,7 @@ assert_checkequal(titles(5).name,"title");
 assert_checkequal(titles(5).content,"Scilab rox");
 assert_checkequal(titles(5).type,"XML_ELEMENT_NODE");
 attribs=titles(4).attributes;
+assert_checkequal(titles(4).attributes.size,[]);
 assert_checkequal(attribs.lang,"en");
 
 // Get all the books where the price is more than 35 euros