XML: attributes can now be accessed via index 73/5373/7
Calixte DENIZET [Tue, 8 Nov 2011 21:32:50 +0000 (22:32 +0100)]
Change-Id: I31b90dd32f73002aba2d36e7ea4e1bec38ef8d28

25 files changed:
scilab/modules/xml/sci_gateway/cpp/sci_percent_XMLAttr_e.cpp
scilab/modules/xml/sci_gateway/cpp/sci_percent_XMLAttr_length.cpp
scilab/modules/xml/sci_gateway/cpp/sci_percent_XMLAttr_size.cpp
scilab/modules/xml/sci_gateway/cpp/sci_percent_XMLList_e.cpp
scilab/modules/xml/sci_gateway/cpp/sci_percent_XMLList_length.cpp
scilab/modules/xml/sci_gateway/cpp/sci_percent_XMLList_size.cpp
scilab/modules/xml/sci_gateway/cpp/sci_percent_c_i_XMLAttr.cpp
scilab/modules/xml/sci_gateway/cpp/sci_percent_foo_i_XMLList.cpp
scilab/modules/xml/sci_gateway/cpp/sci_percent_s_i_XMLList.cpp
scilab/modules/xml/sci_gateway/cpp/sci_xmlAddNs.cpp
scilab/modules/xml/sci_gateway/cpp/sci_xmlClose.cpp
scilab/modules/xml/sci_gateway/cpp/sci_xmlDocument.cpp
scilab/modules/xml/sci_gateway/cpp/sci_xmlDump.cpp
scilab/modules/xml/sci_gateway/cpp/sci_xmlElement.cpp
scilab/modules/xml/sci_gateway/cpp/sci_xmlGetNsByHref.cpp
scilab/modules/xml/sci_gateway/cpp/sci_xmlGetNsByPrefix.cpp
scilab/modules/xml/sci_gateway/cpp/sci_xmlNs.cpp
scilab/modules/xml/sci_gateway/cpp/sci_xmlRead.cpp
scilab/modules/xml/sci_gateway/cpp/sci_xmlReadStr.cpp
scilab/modules/xml/sci_gateway/cpp/sci_xmlValidate.cpp
scilab/modules/xml/sci_gateway/cpp/sci_xmlValidationFile.cpp
scilab/modules/xml/sci_gateway/cpp/sci_xmlWrite.cpp
scilab/modules/xml/sci_gateway/cpp/sci_xmlXPath.cpp
scilab/modules/xml/src/cpp/XMLAttr.cpp
scilab/modules/xml/src/cpp/XMLAttr.hxx

index 3c6661d..8c86fb5 100644 (file)
@@ -35,6 +35,9 @@ int sci_percent_XMLAttr_e(char * fname, unsigned long fname_len)
     int id;
     SciErr err;
     int * prefixaddr = 0;
+    double * indexes = 0;
+    int rows;
+    int cols;
     int * nameaddr = 0;
     int * mlistaddr = 0;
     char * name = 0;
@@ -51,38 +54,53 @@ int sci_percent_XMLAttr_e(char * fname, unsigned long fname_len)
         return 0;
     }
 
-    if (!isStringType(pvApiCtx, prefixaddr))
+    if (Rhs == 2 && isDoubleType(pvApiCtx, prefixaddr))
     {
-        Scierror(999, gettext("%s: Wrong type for input argument #%i: A string expected.\n"), fname, 1);
-        return 0;
+        err = getMatrixOfDouble(pvApiCtx, prefixaddr, &rows, &cols, &indexes);
+        if (rows != 1 || cols != 1)
+        {
+            Scierror(999, gettext("%s: Wrong type for input argument #%d: A string or a real expected.\n"), fname, 1);
+            return 0;
+        }
     }
-
-    getAllocatedSingleString(pvApiCtx, prefixaddr, &prefix);
-
-    if (Rhs == 3)
+    else
     {
-        err = getVarAddressFromPosition(pvApiCtx, 2, &nameaddr);
-        if (err.iErr)
+        if (!isStringType(pvApiCtx, prefixaddr))
         {
-            freeAllocatedSingleString(prefix);
-            printError(&err, 0);
+            Scierror(999, gettext("%s: Wrong type for input argument #%d: A string expected.\n"), fname, 1);
             return 0;
         }
 
-        if (!isStringType(pvApiCtx, nameaddr))
+        getAllocatedSingleString(pvApiCtx, prefixaddr, &prefix);
+
+        if (Rhs == 3)
         {
-            freeAllocatedSingleString(prefix);
-            Scierror(999, gettext("%s: Wrong type for input argument #%i: A string expected.\n"), fname, 1);
-            return 0;
+            err = getVarAddressFromPosition(pvApiCtx, 2, &nameaddr);
+            if (err.iErr)
+            {
+                freeAllocatedSingleString(prefix);
+                printError(&err, 0);
+                return 0;
+            }
+
+            if (!isStringType(pvApiCtx, nameaddr))
+            {
+                freeAllocatedSingleString(prefix);
+                Scierror(999, gettext("%s: Wrong type for input argument #%d: A string expected.\n"), fname, 1);
+                return 0;
+            }
+
+            getAllocatedSingleString(pvApiCtx, nameaddr, &name);
         }
-
-        getAllocatedSingleString(pvApiCtx, nameaddr, &name);
     }
 
     err = getVarAddressFromPosition(pvApiCtx, Rhs, &mlistaddr);
     if (err.iErr)
     {
-        freeAllocatedSingleString(prefix);
+        if (prefix)
+        {
+            freeAllocatedSingleString(prefix);
+        }
         if (name)
         {
             freeAllocatedSingleString(name);
@@ -96,7 +114,10 @@ int sci_percent_XMLAttr_e(char * fname, unsigned long fname_len)
 
     if (!attr)
     {
-        freeAllocatedSingleString(prefix);
+        if (prefix)
+        {
+            freeAllocatedSingleString(prefix);
+        }
         if (name)
         {
             freeAllocatedSingleString(name);
@@ -111,10 +132,20 @@ int sci_percent_XMLAttr_e(char * fname, unsigned long fname_len)
     }
     else
     {
-        value = attr->getAttributeValue(const_cast<const char *>(prefix));
+        if (indexes)
+        {
+            value = attr->getAttributeValue((int)(*indexes));
+        }
+        else
+        {
+            value = attr->getAttributeValue(const_cast<const char *>(prefix));
+        }
     }
 
-    freeAllocatedSingleString(prefix);
+    if (prefix)
+    {
+        freeAllocatedSingleString(prefix);
+    }
     if (name)
     {
         freeAllocatedSingleString(name);
index 7ab1b78..2740940 100644 (file)
@@ -46,7 +46,7 @@ int sci_percent_XMLAttr_length(char * fname, unsigned long fname_len)
 
     if (!isXMLAttr(addr, pvApiCtx))
     {
-        Scierror(999, gettext("%s: Wrong type for input argument #%i: A %s expected.\n"), fname, 1, "XMLAttr");
+        Scierror(999, gettext("%s: Wrong type for input argument #%d: A %s expected.\n"), fname, 1, "XMLAttr");
         return 0;
 
     }
index 403fa2e..b123de5 100644 (file)
@@ -46,7 +46,7 @@ int sci_percent_XMLAttr_size(char * fname, unsigned long fname_len)
 
     if (!isXMLAttr(addr, pvApiCtx))
     {
-        Scierror(999, gettext("%s: Wrong type for input argument #%i: A %s expected.\n"), fname, 1, "XMLAttr");
+        Scierror(999, gettext("%s: Wrong type for input argument #%d: A %s expected.\n"), fname, 1, "XMLAttr");
         return 0;
 
     }
index f1b0b99..c379bf1 100644 (file)
@@ -70,7 +70,7 @@ int sci_percent_XMLList_e(char * fname, unsigned long fname_len)
     {
         if (row != 1 || col != 1)
         {
-            Scierror(999, gettext("%s: Wrong dimension for input argument #%i: A string or a double expected.\n"), fname, 1);
+            Scierror(999, gettext("%s: Wrong dimension for input argument #%d: A string or a double expected.\n"), fname, 1);
             return 0;
         }
 
@@ -111,13 +111,13 @@ int sci_percent_XMLList_e(char * fname, unsigned long fname_len)
 
     if (row != 1 || col != 1 || typ != sci_matrix)
     {
-        Scierror(999, gettext("%s: Wrong dimension for input argument #%i: Single double expected.\n"), fname, 1);
+        Scierror(999, gettext("%s: Wrong dimension for input argument #%d: Single double expected.\n"), fname, 1);
         return 0;
     }
 
     if (isVarComplex(pvApiCtx, daddr))
     {
-        Scierror(999, gettext("%s: Wrong type for input argument #%i: Double expected.\n"), fname, 1);
+        Scierror(999, gettext("%s: Wrong type for input argument #%d: Double expected.\n"), fname, 1);
         return 0;
     }
 
index 4f1cd10..152c223 100644 (file)
@@ -46,7 +46,7 @@ int sci_percent_XMLList_length(char * fname, unsigned long fname_len)
 
     if (!isXMLList(addr, pvApiCtx) && !isXMLSet(addr, pvApiCtx))
     {
-        Scierror(999, gettext("%s: Wrong type for input argument #%i: XMLList or XMLSet expected.\n"), fname, 1);
+        Scierror(999, gettext("%s: Wrong type for input argument #%d: XMLList or XMLSet expected.\n"), fname, 1);
         return 0;
 
     }
index 517caa5..25408be 100644 (file)
@@ -46,7 +46,7 @@ int sci_percent_XMLList_size(char * fname, unsigned long fname_len)
 
     if (!isXMLList(addr, pvApiCtx) && !isXMLSet(addr, pvApiCtx))
     {
-        Scierror(999, gettext("%s: Wrong type for input argument #%i: XMLList or XMLSet expected.\n"), fname, 1);
+        Scierror(999, gettext("%s: Wrong type for input argument #%d: XMLList or XMLSet expected.\n"), fname, 1);
         return 0;
 
     }
index c3cc6f8..2ada90d 100644 (file)
@@ -10,6 +10,9 @@
  *
  */
 
+#include <algorithm>
+#include <vector>
+
 #include "XMLObject.hxx"
 #include "XMLElement.hxx"
 #include "XMLNs.hxx"
@@ -36,6 +39,9 @@ int sci_percent_c_i_XMLAttr(char * fname, unsigned long fname_len)
     SciErr err;
     int * prefixaddr = 0;
     int * nameaddr = 0;
+    double * indexes = 0;
+    int rows;
+    int cols;
     int * rhsaddr = 0;
     int * lhsaddr = 0;
     char * name = 0;
@@ -52,38 +58,53 @@ int sci_percent_c_i_XMLAttr(char * fname, unsigned long fname_len)
         return 0;
     }
 
-    if (!isStringType(pvApiCtx, prefixaddr))
+    if (Rhs == 3 && isDoubleType(pvApiCtx, prefixaddr))
     {
-        Scierror(999, gettext("%s: Wrong type for input argument #%i: A string expected.\n"), fname, 1);
-        return 0;
+        err = getMatrixOfDouble(pvApiCtx, prefixaddr, &rows, &cols, &indexes);
+        if (rows != 1 || cols != 1)
+        {
+            Scierror(999, gettext("%s: Wrong type for input argument #%d: A string or a single integer expected\n"), fname, 1);
+            return 0;
+        }
     }
-
-    getAllocatedSingleString(pvApiCtx, prefixaddr, &prefix);
-
-    if (Rhs == 4)
+    else
     {
-        err = getVarAddressFromPosition(pvApiCtx, 2, &nameaddr);
-        if (err.iErr)
+        if (!isStringType(pvApiCtx, prefixaddr))
         {
-            freeAllocatedSingleString(prefix);
-            printError(&err, 0);
+            Scierror(999, gettext("%s: Wrong type for input argument #%d: A string or a single integer expected.\n"), fname, 1);
             return 0;
         }
 
-        if (!isStringType(pvApiCtx, nameaddr))
+        getAllocatedSingleString(pvApiCtx, prefixaddr, &prefix);
+
+        if (Rhs == 4)
         {
-            freeAllocatedSingleString(prefix);
-            Scierror(999, gettext("%s: Wrong type for input argument #%i: A string expected.\n"), fname, 1);
-            return 0;
+            err = getVarAddressFromPosition(pvApiCtx, 2, &nameaddr);
+            if (err.iErr)
+            {
+                freeAllocatedSingleString(prefix);
+                printError(&err, 0);
+                return 0;
+            }
+
+            if (!isStringType(pvApiCtx, nameaddr))
+            {
+                freeAllocatedSingleString(prefix);
+                Scierror(999, gettext("%s: Wrong type for input argument #%d: A string expected.\n"), fname, 1);
+                return 0;
+            }
+
+            getAllocatedSingleString(pvApiCtx, nameaddr, &name);
         }
-
-        getAllocatedSingleString(pvApiCtx, nameaddr, &name);
     }
 
     err = getVarAddressFromPosition(pvApiCtx, Rhs - 1, &rhsaddr);
     if (err.iErr)
     {
-        freeAllocatedSingleString(prefix);
+        if (prefix)
+        {
+            freeAllocatedSingleString(prefix);
+        }
         if (name)
         {
             freeAllocatedSingleString(name);
@@ -95,7 +116,10 @@ int sci_percent_c_i_XMLAttr(char * fname, unsigned long fname_len)
     err = getVarAddressFromPosition(pvApiCtx, Rhs, &lhsaddr);
     if (err.iErr)
     {
-        freeAllocatedSingleString(prefix);
+        if (prefix)
+        {
+            freeAllocatedSingleString(prefix);
+        }
         if (name)
         {
             freeAllocatedSingleString(name);
@@ -108,7 +132,10 @@ int sci_percent_c_i_XMLAttr(char * fname, unsigned long fname_len)
     a = XMLObject::getFromId<XMLAttr>(lhsid);
     if (!a)
     {
-        freeAllocatedSingleString(prefix);
+        if (prefix)
+        {
+            freeAllocatedSingleString(prefix);
+        }
         if (name)
         {
             freeAllocatedSingleString(name);
@@ -119,12 +146,15 @@ int sci_percent_c_i_XMLAttr(char * fname, unsigned long fname_len)
 
     if (!isStringType(pvApiCtx, rhsaddr))
     {
-        freeAllocatedSingleString(prefix);
+        if (prefix)
+        {
+            freeAllocatedSingleString(prefix);
+        }
         if (name)
         {
             freeAllocatedSingleString(name);
         }
-        Scierror(999, gettext("%s: Wrong type for input argument #%i: A string expected.\n"), fname, Rhs - 1);
+        Scierror(999, gettext("%s: Wrong type for input argument #%d: A string expected.\n"), fname, Rhs - 1);
         return 0;
     }
 
@@ -132,16 +162,26 @@ int sci_percent_c_i_XMLAttr(char * fname, unsigned long fname_len)
 
     if (Rhs == 3)
     {
-        name = prefix;
-        a->setAttributeValue(name, value);
+        if (indexes)
+        {
+            a->setAttributeValue((int)(*indexes), value);
+        }
+        else
+        {
+            name = prefix;
+            a->setAttributeValue(name, value);
+        }
     }
     else
     {
         a->setAttributeValue(prefix, name, value);
     }
 
-    freeAllocatedSingleString(prefix);
-    if (Rhs != 3)
+    if (prefix)
+    {
+        freeAllocatedSingleString(prefix);
+    }
+    if (Rhs != 3 && name)
     {
         freeAllocatedSingleString(name);
     }
index 6123234..4876aa1 100644 (file)
@@ -64,7 +64,7 @@ int sci_percent_foo_i_XMLList(char * fname, unsigned long fname_len)
 
     if (!isDoubleType(pvApiCtx, indexaddr))
     {
-        Scierror(999, gettext("%s: Wrong type for input argument #%i: A double expected.\n"), fname, 1);
+        Scierror(999, gettext("%s: Wrong type for input argument #%d: A double expected.\n"), fname, 1);
         return 0;
     }
 
index ecb797b..662fba4 100644 (file)
@@ -56,7 +56,7 @@ int sci_percent_s_i_XMLList(char * fname, unsigned long fname_len)
 
     if (!isDoubleType(pvApiCtx, indexaddr))
     {
-        Scierror(999, gettext("%s: Wrong type for input argument #%i: A double expected.\n"), fname, 1);
+        Scierror(999, gettext("%s: Wrong type for input argument #%d: A double expected.\n"), fname, 1);
         return 0;
     }
 
index 8d5083a..96170e7 100644 (file)
@@ -51,7 +51,7 @@ int sci_xmlAddNs(char * fname, unsigned long fname_len)
 
     if (!isXMLElem(addr, pvApiCtx))
     {
-        Scierror(999, gettext("%s: Wrong type for input argument #%i: A %s expected.\n"), fname, 1, "XMLElem");
+        Scierror(999, gettext("%s: Wrong type for input argument #%d: A %s expected.\n"), fname, 1, "XMLElem");
         return 0;
     }
 
@@ -73,7 +73,7 @@ int sci_xmlAddNs(char * fname, unsigned long fname_len)
 
         if (!isXMLNs(addr, pvApiCtx))
         {
-            Scierror(999, gettext("%s: Wrong type for input argument #%i: A %s expected.\n"), fname, i, "XMLNs");
+            Scierror(999, gettext("%s: Wrong type for input argument #%d: A %s expected.\n"), fname, i, "XMLNs");
             return 0;
         }
 
index 6dbf5ed..1ca8205 100644 (file)
@@ -96,7 +96,7 @@ int sci_xmlClose(char * fname, unsigned long fname_len)
             }
             else
             {
-                Scierror(999, gettext("%s: Wrong type for input argument #%i: A %s expected\n"), fname, 1, "XMLDoc");
+                Scierror(999, gettext("%s: Wrong type for input argument #%d: A %s expected\n"), fname, 1, "XMLDoc");
                 return 0;
             }
         }
index fe35e79..a2d0f29 100644 (file)
@@ -50,7 +50,7 @@ int sci_xmlDocument(char * fname, unsigned long fname_len)
 
         if (!isStringType(pvApiCtx, addr))
         {
-            Scierror(999, gettext("%s: Wrong type for input argument #%i: A string expected.\n"), fname, i + 1);
+            Scierror(999, gettext("%s: Wrong type for input argument #%d: A string expected.\n"), fname, i + 1);
             return 0;
         }
 
index 5a6de48..91044c1 100644 (file)
@@ -56,7 +56,7 @@ int sci_xmlDump(char *fname, unsigned long fname_len)
     type = isXMLObject(addr, pvApiCtx);
     if (!type)
     {
-        Scierror(999, gettext("%s: Wrong type for input argument #%i: A %s expected.\n"), fname, 1, "XML object");
+        Scierror(999, gettext("%s: Wrong type for input argument #%d: A %s expected.\n"), fname, 1, "XML object");
         return 0;
     }
 
index bf62666..da76430 100644 (file)
@@ -48,7 +48,7 @@ int sci_xmlElement(char * fname, unsigned long fname_len)
 
     if (!isXMLDoc(addr, pvApiCtx))
     {
-        Scierror(999, gettext("%s: Wrong type for input argument #%i: A %s expected.\n"), fname, 1, "XMLDoc");
+        Scierror(999, gettext("%s: Wrong type for input argument #%d: A %s expected.\n"), fname, 1, "XMLDoc");
         return 0;
     }
 
@@ -68,7 +68,7 @@ int sci_xmlElement(char * fname, unsigned long fname_len)
 
     if (!isStringType(pvApiCtx, addr))
     {
-        Scierror(999, gettext("%s: Wrong type for input argument #%i: A string expected.\n"), fname, 2);
+        Scierror(999, gettext("%s: Wrong type for input argument #%d: A string expected.\n"), fname, 2);
         return 0;
     }
 
@@ -77,7 +77,7 @@ int sci_xmlElement(char * fname, unsigned long fname_len)
     if (!strlen(name) || xmlValidateName((const xmlChar *)name, 0))
     {
         freeAllocatedSingleString(name);
-        Scierror(999, gettext("%s: Bad input argument #%i: A valid XML name expected.\n"), fname, 2);
+        Scierror(999, gettext("%s: Bad input argument #%d: A valid XML name expected.\n"), fname, 2);
         return 0;
     }
 
index b7be977..f7606b8 100644 (file)
@@ -47,7 +47,7 @@ int sci_xmlGetNsByHref(char * fname, unsigned long fname_len)
 
     if (!isXMLElem(addr, pvApiCtx))
     {
-        Scierror(999, gettext("%s: Wrong type for input argument #%i: A %s expected.\n"), fname, 1, "XMLElem");
+        Scierror(999, gettext("%s: Wrong type for input argument #%d: A %s expected.\n"), fname, 1, "XMLElem");
         return 0;
     }
 
@@ -67,7 +67,7 @@ int sci_xmlGetNsByHref(char * fname, unsigned long fname_len)
 
     if (!isStringType(pvApiCtx, addr))
     {
-        Scierror(999, gettext("%s: Wrong type for input argument #%i: A string expected.\n"), fname, 2);
+        Scierror(999, gettext("%s: Wrong type for input argument #%d: A string expected.\n"), fname, 2);
         return 0;
     }
 
index b9ef16c..702dcca 100644 (file)
@@ -47,7 +47,7 @@ int sci_xmlGetNsByPrefix(char * fname, unsigned long fname_len)
 
     if (!isXMLElem(addr, pvApiCtx))
     {
-        Scierror(999, gettext("%s: Wrong type for input argument #%i: A %s expected.\n"), fname, 1, "XMLElem");
+        Scierror(999, gettext("%s: Wrong type for input argument #%d: A %s expected.\n"), fname, 1, "XMLElem");
         return 0;
     }
 
@@ -67,7 +67,7 @@ int sci_xmlGetNsByPrefix(char * fname, unsigned long fname_len)
 
     if (!isStringType(pvApiCtx, addr))
     {
-        Scierror(999, gettext("%s: Wrong type for input argument #%i: A string expected.\n"), fname, 2);
+        Scierror(999, gettext("%s: Wrong type for input argument #%d: A string expected.\n"), fname, 2);
         return 0;
     }
 
index f87367a..d16f04c 100644 (file)
@@ -50,7 +50,7 @@ int sci_xmlNs(char * fname, unsigned long fname_len)
 
     if (!isXMLElem(addr, pvApiCtx))
     {
-        Scierror(999, gettext("%s: Wrong type for input argument #%i: A %s expected.\n"), fname, 1, "XMLElem");
+        Scierror(999, gettext("%s: Wrong type for input argument #%d: A %s expected.\n"), fname, 1, "XMLElem");
         return 0;
     }
 
@@ -72,7 +72,7 @@ int sci_xmlNs(char * fname, unsigned long fname_len)
 
         if (!isStringType(pvApiCtx, addr))
         {
-            Scierror(999, gettext("%s: Wrong type for input argument #%i: A string expected.\n"), fname, i + 2);
+            Scierror(999, gettext("%s: Wrong type for input argument #%d: A string expected.\n"), fname, i + 2);
             return 0;
         }
 
index 1409148..dfd91b3 100644 (file)
@@ -52,7 +52,7 @@ int sci_xmlRead(char * fname, unsigned long fname_len)
 
     if (!isStringType(pvApiCtx, addr))
     {
-        Scierror(999, gettext("%s: Wrong type for input argument #%i: A string expected.\n"), fname, 1);
+        Scierror(999, gettext("%s: Wrong type for input argument #%d: A string expected.\n"), fname, 1);
         return 0;
     }
     getAllocatedSingleString(pvApiCtx, addr, &path);
@@ -70,7 +70,7 @@ int sci_xmlRead(char * fname, unsigned long fname_len)
         if (!isBooleanType(pvApiCtx, addr))
         {
             freeAllocatedSingleString(path);
-            Scierror(999, gettext("%s: Wrong type for input argument #%i: A boolean expected.\n"), fname, 2);
+            Scierror(999, gettext("%s: Wrong type for input argument #%d: A boolean expected.\n"), fname, 2);
             return 0;
         }
 
index 6eabed7..9036ee8 100644 (file)
@@ -49,7 +49,7 @@ int sci_xmlReadStr(char * fname, unsigned long fname_len)
 
     if (!isStringType(pvApiCtx, addr))
     {
-        Scierror(999, gettext("%s: Wrong type for input argument #%i: A string expected.\n"), fname, 1);
+        Scierror(999, gettext("%s: Wrong type for input argument #%d: A string expected.\n"), fname, 1);
         return 0;
     }
 
@@ -71,7 +71,7 @@ int sci_xmlReadStr(char * fname, unsigned long fname_len)
         if (!isBooleanType(pvApiCtx, addr))
         {
             delete code;
-            Scierror(999, gettext("%s: Wrong type for input argument #%i: A boolean expected.\n"), fname, 2);
+            Scierror(999, gettext("%s: Wrong type for input argument #%d: A boolean expected.\n"), fname, 2);
             return 0;
         }
 
index 7f65d34..0d475e0 100644 (file)
@@ -70,7 +70,7 @@ int sci_xmlValidate(char * fname, unsigned long fname_len)
     }
     else
     {
-        Scierror(999, gettext("%s: Wrong type for input argument #%i: A matrix of strings or a XMLDoc expected.\n"), fname, 1);
+        Scierror(999, gettext("%s: Wrong type for input argument #%d: A matrix of strings or a XMLDoc expected.\n"), fname, 1);
         return 0;
     }
 
@@ -85,7 +85,7 @@ int sci_xmlValidate(char * fname, unsigned long fname_len)
 
         if (!isXMLValid(addr, pvApiCtx))
         {
-            Scierror(999, gettext("%s: Wrong type for input argument #%i: A %s expected.\n"), fname, 1, "XMLValid");
+            Scierror(999, gettext("%s: Wrong type for input argument #%d: A %s expected.\n"), fname, 1, "XMLValid");
             return 0;
         }
 
index 0704d01..88d1a2d 100644 (file)
@@ -54,7 +54,7 @@ int sci_xmlValidationFile(char * fname, void* pvApiCtx)
 
     if (!isStringType(pvApiCtx, addr))
     {
-        Scierror(999, gettext("%s: Wrong type for input argument #%i: A string expected.\n"), fname, 1);
+        Scierror(999, gettext("%s: Wrong type for input argument #%d: A string expected.\n"), fname, 1);
         return 0;
     }
     getAllocatedSingleString(pvApiCtx, addr, &path);
index df1825c..cf621b2 100644 (file)
@@ -79,7 +79,7 @@ int sci_xmlWrite(char * fname, unsigned long fname_len)
 
         if (!isStringType(pvApiCtx, addr))
         {
-            Scierror(999, gettext("%s: Wrong type for input argument #%i: A string expected.\n"), fname, 2);
+            Scierror(999, gettext("%s: Wrong type for input argument #%d: A string expected.\n"), fname, 2);
             return 0;
         }
 
index 0b55686..07af05f 100644 (file)
@@ -55,7 +55,7 @@ int sci_xmlXPath(char * fname, unsigned long fname_len)
 
     if (!isXMLDoc(addr, pvApiCtx))
     {
-        Scierror(999, gettext("%s: Wrong type for input argument #%i: A %s expected.\n"), fname, 1, "XMLDoc");
+        Scierror(999, gettext("%s: Wrong type for input argument #%d: A %s expected.\n"), fname, 1, "XMLDoc");
         return 0;
     }
 
@@ -76,7 +76,7 @@ int sci_xmlXPath(char * fname, unsigned long fname_len)
 
     if (!isStringType(pvApiCtx, addr))
     {
-        Scierror(999, gettext("%s: Wrong type for input argument #%i: A string expected.\n"), fname, 2);
+        Scierror(999, gettext("%s: Wrong type for input argument #%d: A string expected.\n"), fname, 2);
         return 0;
     }
     getAllocatedSingleString(pvApiCtx, addr, &query);
@@ -94,7 +94,7 @@ int sci_xmlXPath(char * fname, unsigned long fname_len)
         if (!isStringType(pvApiCtx, addr))
         {
             freeAllocatedSingleString(query);
-            Scierror(999, gettext("%s: Wrong type for input argument #%i: A string expected.\n"), fname, 2);
+            Scierror(999, gettext("%s: Wrong type for input argument #%d: A string expected.\n"), fname, 2);
             return 0;
         }
 
@@ -109,7 +109,7 @@ int sci_xmlXPath(char * fname, unsigned long fname_len)
         if (col != 2)
         {
             freeAllocatedSingleString(query);
-            Scierror(999, gettext("%s: Bad number of columns for argument #%i: two expected.\n"), fname, 3);
+            Scierror(999, gettext("%s: Bad number of columns for argument #%d: two expected.\n"), fname, 3);
             return 0;
         }
 
index a5ff350..3648ef4 100644 (file)
@@ -77,6 +77,21 @@ namespace org_modules_xml
         return 0;
     }
 
+    const char * XMLAttr::getAttributeValue(int index) const
+    {
+        xmlNode * node = elem.getRealNode();
+        int i = 1;
+        for (xmlAttr * cur = node->properties; cur; cur = cur->next, i++)
+        {
+            if (i == index)
+            {
+                return (const char *)cur->children->content;
+            }
+        }
+
+        return 0;
+    }
+
     void XMLAttr::setAttributeValue(const char * prefix, const char * name, const char * value) const
     {
         xmlNode * node = elem.getRealNode();
@@ -92,14 +107,7 @@ namespace org_modules_xml
 
         if (attrs)
         {
-            if (strlen(value))
-            {
-                xmlSetNsProp(node, attrs->ns, (const xmlChar *)name, (const xmlChar *)value);
-            }
-            else
-            {
-                xmlUnsetNsProp(node, attrs->ns, (const xmlChar *)name);
-            }
+            xmlSetNsProp(node, attrs->ns, (const xmlChar *)name, (const xmlChar *)value);
         }
         else if (strlen(value))
         {
@@ -124,20 +132,33 @@ namespace org_modules_xml
         }
     }
 
+    void XMLAttr::setAttributeValue(int index, const char * value) const
+    {
+        xmlNode * node = elem.getRealNode();
+        unsigned int i = 1;
+        for (xmlAttr * cur = node->properties; cur; cur = cur->next, i++)
+        {
+            if (i == index)
+            {
+                if (strlen(value))
+                {
+                    cur->children->content = xmlStrdup((const xmlChar *)value);
+                }
+                else
+                {
+                    cur->children->content = xmlStrdup((const xmlChar *)"");
+                }
+            }
+        }
+    }
+
     void XMLAttr::setAttributeValue(const char * name, const char * value) const
     {
         xmlNode * node = elem.getRealNode();
         xmlAttr * attrs = xmlHasProp(node, (const xmlChar *)name);
         if (attrs)
         {
-            if (strlen(value))
-            {
-                xmlSetProp(node, (const xmlChar *)name, (const xmlChar *)value);
-            }
-            else
-            {
-                xmlUnsetProp(node, (const xmlChar *)name);
-            }
+            xmlSetProp(node, (const xmlChar *)name, (const xmlChar *)value);
         }
         else
         {
index 2697a42..9742822 100644 (file)
@@ -45,6 +45,13 @@ namespace org_modules_xml
         int getSize() const;
 
         /**
+         * Gets the attribute value with the given index.
+         * @param index the attribute index
+         * @return the attribute value
+         */
+        const char * getAttributeValue(int index) const;
+
+        /**
          * Gets the attribute value.
          * @param name the attribute name
          * @return the attribute value
@@ -67,6 +74,13 @@ namespace org_modules_xml
         void setAttributeValue(const char * name, const char * value) const;
 
         /**
+         * Sets the attribute value at the given index.
+         * @param index the attribute index
+         * @param value the attribute value
+         */
+        void setAttributeValue(int index, const char * value) const;
+
+        /**
          * Sets the attribute value with a prefix namespace.
          * @param prefix the namespace prefix or the namespace itself
          * @param name the attribute name