emfio/qa/cppunit/emf/EmfImportTest.cxx |  824 +++++++++++++++++----------------
 emfio/qa/cppunit/wmf/wmfimporttest.cxx |  364 +++++++-------
 emfio/source/reader/mtftools.cxx       |    8 
 3 files changed, 620 insertions(+), 576 deletions(-)

New commits:
commit e66ccbecfb414800271e066c630cf7e90d5f3b74
Author:     Stephan Bergmann <sberg...@redhat.com>
AuthorDate: Sun Nov 19 22:04:45 2023 +0100
Commit:     Stephan Bergmann <sberg...@redhat.com>
CommitDate: Mon Nov 20 08:25:16 2023 +0100

    Extended loplugin:ostr: emfio
    
    Change-Id: Ida43018a83c68f5d20dbee30325b8f32099e5b1b
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159713
    Tested-by: Jenkins
    Reviewed-by: Stephan Bergmann <sberg...@redhat.com>

diff --git a/emfio/qa/cppunit/emf/EmfImportTest.cxx 
b/emfio/qa/cppunit/emf/EmfImportTest.cxx
index 9e892b67eaa5..8a74745b6e12 100644
--- a/emfio/qa/cppunit/emf/EmfImportTest.cxx
+++ b/emfio/qa/cppunit/emf/EmfImportTest.cxx
@@ -43,7 +43,7 @@ public:
     {
     }
 
-    const OString aXPathPrefix = "/primitive2D/metafile/transform/";
+    const OString aXPathPrefix = "/primitive2D/metafile/transform/"_ostr;
 
     Primitive2DSequence parseEmf(std::u16string_view aSource);
 };
@@ -79,37 +79,38 @@ CPPUNIT_TEST_FIXTURE(Test, testPolyPolygon)
     CPPUNIT_ASSERT(pDocument);
 
     // Chart axis
-    assertXPath(pDocument, aXPathPrefix + "mask/polypolygon", "path", "m0 
0h19746v14817h-19746z");
+    assertXPath(pDocument, aXPathPrefix + "mask/polypolygon", "path"_ostr,
+                "m0 0h19746v14817h-19746z");
     assertXPath(pDocument, aXPathPrefix + "mask/polypolygoncolor", 2);
-    assertXPath(pDocument, aXPathPrefix + "mask/polypolygoncolor[1]", "color", 
"#ffffff");
-    assertXPath(pDocument, aXPathPrefix + 
"mask/polypolygoncolor[1]/polypolygon", "path",
+    assertXPath(pDocument, aXPathPrefix + "mask/polypolygoncolor[1]", 
"color"_ostr, "#ffffff");
+    assertXPath(pDocument, aXPathPrefix + 
"mask/polypolygoncolor[1]/polypolygon", "path"_ostr,
                 "m0 0h19781v14852h-19781z");
-    assertXPath(pDocument, aXPathPrefix + 
"mask/polypolygoncolor[2]/polypolygon", "path",
+    assertXPath(pDocument, aXPathPrefix + 
"mask/polypolygoncolor[2]/polypolygon", "path"_ostr,
                 "m2574 13194v-12065h15303v12065z");
 
     assertXPath(pDocument, aXPathPrefix + "mask/polygonstroke", 44);
     assertXPathContent(pDocument, aXPathPrefix + 
"mask/polygonstroke[1]/polygon",
                        "2574,13194 2574,1129");
-    assertXPath(pDocument, aXPathPrefix + "mask/polygonstroke[1]/line", 
"color", "#000000");
-    assertXPath(pDocument, aXPathPrefix + "mask/polygonstroke[1]/line", 
"width", "0");
+    assertXPath(pDocument, aXPathPrefix + "mask/polygonstroke[1]/line", 
"color"_ostr, "#000000");
+    assertXPath(pDocument, aXPathPrefix + "mask/polygonstroke[1]/line", 
"width"_ostr, "0");
     assertXPathContent(pDocument, aXPathPrefix + 
"mask/polygonstroke[2]/polygon",
                        "2574,1129 2574,1129");
-    assertXPath(pDocument, aXPathPrefix + "mask/polygonstroke[2]/line", 
"color", "#000000");
-    assertXPath(pDocument, aXPathPrefix + "mask/polygonstroke[2]/line", 
"width", "0");
+    assertXPath(pDocument, aXPathPrefix + "mask/polygonstroke[2]/line", 
"color"_ostr, "#000000");
+    assertXPath(pDocument, aXPathPrefix + "mask/polygonstroke[2]/line", 
"width"_ostr, "0");
     assertXPathContent(pDocument, aXPathPrefix + 
"mask/polygonstroke[10]/polygon",
                        "8674,1129 8674,1129");
-    assertXPath(pDocument, aXPathPrefix + "mask/polygonstroke[10]/line", 
"color", "#000000");
-    assertXPath(pDocument, aXPathPrefix + "mask/polygonstroke[10]/line", 
"width", "0");
+    assertXPath(pDocument, aXPathPrefix + "mask/polygonstroke[10]/line", 
"color"_ostr, "#000000");
+    assertXPath(pDocument, aXPathPrefix + "mask/polygonstroke[10]/line", 
"width"_ostr, "0");
 
     assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion", 28);
-    assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion[6]", 
"width", "459");
-    assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion[6]", "x", 
"9908");
-    assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion[6]", "text", 
"0.5");
-    assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion[6]", 
"fontcolor", "#000000");
+    assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion[6]", 
"width"_ostr, "459");
+    assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion[6]", 
"x"_ostr, "9908");
+    assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion[6]", 
"text"_ostr, "0.5");
+    assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion[6]", 
"fontcolor"_ostr, "#000000");
     assertXPath(pDocument, aXPathPrefix + "mask/pointarray", 98);
-    assertXPath(pDocument, aXPathPrefix + "mask/pointarray[1]", "color", 
"#000000");
-    assertXPath(pDocument, aXPathPrefix + "mask/pointarray[1]/point", "x", 
"2574");
-    assertXPath(pDocument, aXPathPrefix + "mask/pointarray[1]/point", "y", 
"1129");
+    assertXPath(pDocument, aXPathPrefix + "mask/pointarray[1]", "color"_ostr, 
"#000000");
+    assertXPath(pDocument, aXPathPrefix + "mask/pointarray[1]/point", 
"x"_ostr, "2574");
+    assertXPath(pDocument, aXPathPrefix + "mask/pointarray[1]/point", 
"y"_ostr, "1129");
 }
 
 CPPUNIT_TEST_FIXTURE(Test, testDrawImagePointsTypeBitmap)
@@ -124,15 +125,15 @@ CPPUNIT_TEST_FIXTURE(Test, testDrawImagePointsTypeBitmap)
     xmlDocUniquePtr pDocument = 
dumper.dumpAndParse(Primitive2DContainer(aSequence));
     CPPUNIT_ASSERT(pDocument);
 
-    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor", "color", 
"#0080ff");
-    assertXPath(pDocument, aXPathPrefix + "bitmap", "xy11", "5346");
-    assertXPath(pDocument, aXPathPrefix + "bitmap", "xy12", "0");
-    assertXPath(pDocument, aXPathPrefix + "bitmap", "xy13", "5558");
-    assertXPath(pDocument, aXPathPrefix + "bitmap", "xy21", "0");
-    assertXPath(pDocument, aXPathPrefix + "bitmap", "xy22", "4716");
-    assertXPath(pDocument, aXPathPrefix + "bitmap", "xy23", "5564");
+    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor", "color"_ostr, 
"#0080ff");
+    assertXPath(pDocument, aXPathPrefix + "bitmap", "xy11"_ostr, "5346");
+    assertXPath(pDocument, aXPathPrefix + "bitmap", "xy12"_ostr, "0");
+    assertXPath(pDocument, aXPathPrefix + "bitmap", "xy13"_ostr, "5558");
+    assertXPath(pDocument, aXPathPrefix + "bitmap", "xy21"_ostr, "0");
+    assertXPath(pDocument, aXPathPrefix + "bitmap", "xy22"_ostr, "4716");
+    assertXPath(pDocument, aXPathPrefix + "bitmap", "xy23"_ostr, "5564");
     assertXPath(
-        pDocument, aXPathPrefix + "bitmap/data[2]", "row",
+        pDocument, aXPathPrefix + "bitmap/data[2]", "row"_ostr,
         
"020202,ffffff,ffffff,ffffff,fefefe,ffffff,ffffff,fefefe,ffffff,ffffff,f8f8f8,ffffff,"
         
"fdfdfd,ffffff,ffffff,fdfdfd,ffffff,ffffff,ffffff,fbfbfb,010101,ffffff,fefefe,ffffff,"
         
"ffffff,fbfbfb,ffffff,fdfdfd,fcfcfc,fdfdfd,ffffff,ffffff,ffffff,ffffff,ffffff,ffffff,"
@@ -156,12 +157,14 @@ CPPUNIT_TEST_FIXTURE(Test, testDrawString)
     CPPUNIT_ASSERT(pDocument);
 
     // check correct import of the DrawString: height, position, text, color 
and font
-    assertXPath(pDocument, aXPathPrefix + "transform/textsimpleportion", 
"height", "120");
-    assertXPath(pDocument, aXPathPrefix + "transform/textsimpleportion", "x", 
"817");
-    assertXPath(pDocument, aXPathPrefix + "transform/textsimpleportion", "y", 
"1137");
-    assertXPath(pDocument, aXPathPrefix + "transform/textsimpleportion", 
"text", "TEST");
-    assertXPath(pDocument, aXPathPrefix + "transform/textsimpleportion", 
"fontcolor", "#000000");
-    assertXPath(pDocument, aXPathPrefix + "transform/textsimpleportion", 
"familyname", "CALIBRI");
+    assertXPath(pDocument, aXPathPrefix + "transform/textsimpleportion", 
"height"_ostr, "120");
+    assertXPath(pDocument, aXPathPrefix + "transform/textsimpleportion", 
"x"_ostr, "817");
+    assertXPath(pDocument, aXPathPrefix + "transform/textsimpleportion", 
"y"_ostr, "1137");
+    assertXPath(pDocument, aXPathPrefix + "transform/textsimpleportion", 
"text"_ostr, "TEST");
+    assertXPath(pDocument, aXPathPrefix + "transform/textsimpleportion", 
"fontcolor"_ostr,
+                "#000000");
+    assertXPath(pDocument, aXPathPrefix + "transform/textsimpleportion", 
"familyname"_ostr,
+                "CALIBRI");
 #endif
 }
 
@@ -177,60 +180,76 @@ CPPUNIT_TEST_FIXTURE(Test, testDrawStringAlign)
     CPPUNIT_ASSERT(pDocument);
 
     assertXPath(pDocument, aXPathPrefix + "mask/transform", 9);
-    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[1]/textsimpleportion", "width", "12");
-    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[1]/textsimpleportion", "height", "12");
-    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[1]/textsimpleportion", "x", "12");
-    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[1]/textsimpleportion", "y", "22");
-    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[1]/textsimpleportion", "text", "HLVT");
-    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[1]/textsimpleportion", "fontcolor",
+    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[1]/textsimpleportion", "width"_ostr,
+                "12");
+    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[1]/textsimpleportion", "height"_ostr,
+                "12");
+    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[1]/textsimpleportion", "x"_ostr, "12");
+    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[1]/textsimpleportion", "y"_ostr, "22");
+    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[1]/textsimpleportion", "text"_ostr,
+                "HLVT");
+    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[1]/textsimpleportion", "fontcolor"_ostr,
                 "#000000");
-    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[1]/textsimpleportion", "familyname",
+    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[1]/textsimpleportion", "familyname"_ostr,
                 "ARIAL");
 
-    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[2]/textsimpleportion", "width", "12");
-    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[2]/textsimpleportion", "height", "12");
-    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[2]/textsimpleportion", "x", "143");
-    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[2]/textsimpleportion", "y", "22");
-    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[2]/textsimpleportion", "text", "HCVT");
+    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[2]/textsimpleportion", "width"_ostr,
+                "12");
+    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[2]/textsimpleportion", "height"_ostr,
+                "12");
+    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[2]/textsimpleportion", "x"_ostr, "143");
+    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[2]/textsimpleportion", "y"_ostr, "22");
+    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[2]/textsimpleportion", "text"_ostr,
+                "HCVT");
 
     // TODO Make the position of the text the same across the platforms (Arial 
vs Liberation Sans).
     // This is usually 276, but can be 275 as well; depends on what fonts are 
installed?
     sal_Int32 nX
-        = getXPath(pDocument, aXPathPrefix + 
"mask/transform[3]/textsimpleportion", "x").toInt32();
+        = getXPath(pDocument, aXPathPrefix + 
"mask/transform[3]/textsimpleportion", "x"_ostr)
+              .toInt32();
     CPPUNIT_ASSERT(nX >= 275);
     CPPUNIT_ASSERT(nX <= 276);
-    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[3]/textsimpleportion", "y", "22");
-    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[3]/textsimpleportion", "text", "HRVT");
+    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[3]/textsimpleportion", "y"_ostr, "22");
+    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[3]/textsimpleportion", "text"_ostr,
+                "HRVT");
 
-    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[4]/textsimpleportion", "x", "12");
-    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[4]/textsimpleportion", "y", "66");
-    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[4]/textsimpleportion", "text", "HLVC");
+    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[4]/textsimpleportion", "x"_ostr, "12");
+    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[4]/textsimpleportion", "y"_ostr, "66");
+    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[4]/textsimpleportion", "text"_ostr,
+                "HLVC");
 
-    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[5]/textsimpleportion", "x", "142");
-    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[5]/textsimpleportion", "y", "66");
-    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[5]/textsimpleportion", "text", "HCVC");
+    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[5]/textsimpleportion", "x"_ostr, "142");
+    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[5]/textsimpleportion", "y"_ostr, "66");
+    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[5]/textsimpleportion", "text"_ostr,
+                "HCVC");
 
     // This is usually 274, but can be 273 as well; depends on what fonts are 
installed?
-    nX = getXPath(pDocument, aXPathPrefix + 
"mask/transform[6]/textsimpleportion", "x").toInt32();
+    nX = getXPath(pDocument, aXPathPrefix + 
"mask/transform[6]/textsimpleportion", "x"_ostr)
+             .toInt32();
     CPPUNIT_ASSERT(nX >= 273);
     CPPUNIT_ASSERT(nX <= 274);
-    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[6]/textsimpleportion", "y", "66");
-    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[6]/textsimpleportion", "text", "HRVC");
+    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[6]/textsimpleportion", "y"_ostr, "66");
+    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[6]/textsimpleportion", "text"_ostr,
+                "HRVC");
 
-    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[7]/textsimpleportion", "x", "12");
-    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[7]/textsimpleportion", "y", "110");
-    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[7]/textsimpleportion", "text", "HLVB");
+    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[7]/textsimpleportion", "x"_ostr, "12");
+    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[7]/textsimpleportion", "y"_ostr, "110");
+    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[7]/textsimpleportion", "text"_ostr,
+                "HLVB");
 
-    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[8]/textsimpleportion", "x", "143");
-    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[8]/textsimpleportion", "y", "110");
-    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[8]/textsimpleportion", "text", "HCVB");
+    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[8]/textsimpleportion", "x"_ostr, "143");
+    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[8]/textsimpleportion", "y"_ostr, "110");
+    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[8]/textsimpleportion", "text"_ostr,
+                "HCVB");
 
     // This is usually 275, but can be 274 as well; depends on what fonts are 
installed?
-    nX = getXPath(pDocument, aXPathPrefix + 
"mask/transform[9]/textsimpleportion", "x").toInt32();
+    nX = getXPath(pDocument, aXPathPrefix + 
"mask/transform[9]/textsimpleportion", "x"_ostr)
+             .toInt32();
     CPPUNIT_ASSERT(nX >= 274);
     CPPUNIT_ASSERT(nX <= 275);
-    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[9]/textsimpleportion", "y", "110");
-    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[9]/textsimpleportion", "text", "HRVB");
+    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[9]/textsimpleportion", "y"_ostr, "110");
+    assertXPath(pDocument, aXPathPrefix + 
"mask/transform[9]/textsimpleportion", "text"_ostr,
+                "HRVB");
 #endif
 }
 
@@ -246,20 +265,20 @@ CPPUNIT_TEST_FIXTURE(Test, testDrawStringTransparent)
     xmlDocUniquePtr pDocument = 
dumper.dumpAndParse(Primitive2DContainer(aSequence));
     CPPUNIT_ASSERT(pDocument);
 
-    assertXPath(pDocument, aXPathPrefix + 
"mask/transform/unifiedtransparence", "transparence",
+    assertXPath(pDocument, aXPathPrefix + 
"mask/transform/unifiedtransparence", "transparence"_ostr,
                 "50");
     assertXPath(pDocument, aXPathPrefix + 
"mask/transform/unifiedtransparence/textsimpleportion",
-                "height", "24");
+                "height"_ostr, "24");
     assertXPath(pDocument, aXPathPrefix + 
"mask/transform/unifiedtransparence/textsimpleportion",
-                "x", "66");
+                "x"_ostr, "66");
     assertXPath(pDocument, aXPathPrefix + 
"mask/transform/unifiedtransparence/textsimpleportion",
-                "y", "74");
+                "y"_ostr, "74");
     assertXPath(pDocument, aXPathPrefix + 
"mask/transform/unifiedtransparence/textsimpleportion",
-                "text", "Transparent Text");
+                "text"_ostr, "Transparent Text");
     assertXPath(pDocument, aXPathPrefix + 
"mask/transform/unifiedtransparence/textsimpleportion",
-                "fontcolor", "#0000ff");
+                "fontcolor"_ostr, "#0000ff");
     assertXPath(pDocument, aXPathPrefix + 
"mask/transform/unifiedtransparence/textsimpleportion",
-                "familyname", "ARIAL");
+                "familyname"_ostr, "ARIAL");
 #endif
 }
 
@@ -272,14 +291,15 @@ CPPUNIT_TEST_FIXTURE(Test, testDrawStringWithBrush)
     drawinglayer::Primitive2dXmlDump dumper;
     xmlDocUniquePtr pDocument = 
dumper.dumpAndParse(Primitive2DContainer(aSequence));
     CPPUNIT_ASSERT(pDocument);
-    assertXPath(pDocument, aXPathPrefix + "transform/textdecoratedportion", 
"xy11", "20");
-    assertXPath(pDocument, aXPathPrefix + "transform/textdecoratedportion", 
"xy13", "16");
-    assertXPath(pDocument, aXPathPrefix + "transform/textdecoratedportion", 
"xy22", "20");
-    assertXPath(pDocument, aXPathPrefix + "transform/textdecoratedportion", 
"xy33", "1");
-    assertXPath(pDocument, aXPathPrefix + "transform/textdecoratedportion", 
"text",
+    assertXPath(pDocument, aXPathPrefix + "transform/textdecoratedportion", 
"xy11"_ostr, "20");
+    assertXPath(pDocument, aXPathPrefix + "transform/textdecoratedportion", 
"xy13"_ostr, "16");
+    assertXPath(pDocument, aXPathPrefix + "transform/textdecoratedportion", 
"xy22"_ostr, "20");
+    assertXPath(pDocument, aXPathPrefix + "transform/textdecoratedportion", 
"xy33"_ostr, "1");
+    assertXPath(pDocument, aXPathPrefix + "transform/textdecoratedportion", 
"text"_ostr,
                 "0123456789ABCDEF");
-    assertXPath(pDocument, aXPathPrefix + "transform/textdecoratedportion", 
"fontcolor", "#a50021");
-    assertXPath(pDocument, aXPathPrefix + "transform/textdecoratedportion", 
"familyname",
+    assertXPath(pDocument, aXPathPrefix + "transform/textdecoratedportion", 
"fontcolor"_ostr,
+                "#a50021");
+    assertXPath(pDocument, aXPathPrefix + "transform/textdecoratedportion", 
"familyname"_ostr,
                 "TIMES NEW ROMAN");
 }
 
@@ -295,20 +315,22 @@ CPPUNIT_TEST_FIXTURE(Test, testEmfPlusDrawBeziers)
     CPPUNIT_ASSERT(pDocument);
 
     assertXPath(pDocument, aXPathPrefix + "polypolygoncolor", 4);
-    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[1]", "color", 
"#000000");
+    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[1]", "color"_ostr, 
"#000000");
 
     assertXPath(pDocument, aXPathPrefix + "polygonstrokearrow", 9);
-    assertXPath(pDocument, aXPathPrefix + "polygonstrokearrow[9]/line", 
"color", "#00ff00");
+    assertXPath(pDocument, aXPathPrefix + "polygonstrokearrow[9]/line", 
"color"_ostr, "#00ff00");
 
     assertXPath(pDocument, aXPathPrefix + "transform", 5);
-    assertXPath(pDocument, aXPathPrefix + "transform[1]/textsimpleportion", 
"fontcolor", "#000000");
-    assertXPath(pDocument, aXPathPrefix + "transform[1]/textsimpleportion", 
"text", "% Efficiency");
-    assertXPath(pDocument, aXPathPrefix + "transform[1]", "xy11", "0");
-    assertXPath(pDocument, aXPathPrefix + "transform[1]", "xy12", "4");
-    assertXPath(pDocument, aXPathPrefix + "transform[1]", "xy13", "800");
-    assertXPath(pDocument, aXPathPrefix + "transform[1]", "xy21", "-4");
-    assertXPath(pDocument, aXPathPrefix + "transform[1]", "xy22", "0");
-    assertXPath(pDocument, aXPathPrefix + "transform[1]", "xy23", "3195");
+    assertXPath(pDocument, aXPathPrefix + "transform[1]/textsimpleportion", 
"fontcolor"_ostr,
+                "#000000");
+    assertXPath(pDocument, aXPathPrefix + "transform[1]/textsimpleportion", 
"text"_ostr,
+                "% Efficiency");
+    assertXPath(pDocument, aXPathPrefix + "transform[1]", "xy11"_ostr, "0");
+    assertXPath(pDocument, aXPathPrefix + "transform[1]", "xy12"_ostr, "4");
+    assertXPath(pDocument, aXPathPrefix + "transform[1]", "xy13"_ostr, "800");
+    assertXPath(pDocument, aXPathPrefix + "transform[1]", "xy21"_ostr, "-4");
+    assertXPath(pDocument, aXPathPrefix + "transform[1]", "xy22"_ostr, "0");
+    assertXPath(pDocument, aXPathPrefix + "transform[1]", "xy23"_ostr, "3195");
 }
 
 CPPUNIT_TEST_FIXTURE(Test, testDrawLine)
@@ -322,15 +344,16 @@ CPPUNIT_TEST_FIXTURE(Test, testDrawLine)
     CPPUNIT_ASSERT(pDocument);
 
     // check correct import of the DrawLine: color and width of the line
-    assertXPath(pDocument, aXPathPrefix + "mask/unifiedtransparence", 
"transparence", "14");
+    assertXPath(pDocument, aXPathPrefix + "mask/unifiedtransparence", 
"transparence"_ostr, "14");
     assertXPath(pDocument, aXPathPrefix + 
"mask/unifiedtransparence/polypolygonstroke/line",
-                "color", "#c01002");
+                "color"_ostr, "#c01002");
     assertXPath(pDocument, aXPathPrefix + 
"mask/unifiedtransparence/polypolygonstroke/line",
-                "width", "115");
+                "width"_ostr, "115");
     assertXPath(pDocument, aXPathPrefix + 
"mask/unifiedtransparence/polypolygonstroke/line",
-                "linecap", "BUTT");
+                "linecap"_ostr, "BUTT");
     assertXPath(pDocument, aXPathPrefix + 
"mask/unifiedtransparence/polypolygonstroke/polypolygon",
-                "path", "m55.5192348773662 403.573503917507 
874.352660545936-345.821325648415");
+                "path"_ostr,
+                "m55.5192348773662 403.573503917507 
874.352660545936-345.821325648415");
 }
 
 CPPUNIT_TEST_FIXTURE(Test, testDrawLineWithCaps)
@@ -345,46 +368,46 @@ CPPUNIT_TEST_FIXTURE(Test, testDrawLineWithCaps)
     CPPUNIT_ASSERT(pDocument);
     assertXPath(pDocument, aXPathPrefix + "polygonstrokearrow", 3);
 
-    assertXPath(pDocument, aXPathPrefix + "polygonstrokearrow[1]/line", 
"width", "211");
+    assertXPath(pDocument, aXPathPrefix + "polygonstrokearrow[1]/line", 
"width"_ostr, "211");
     assertXPath(pDocument, aXPathPrefix + "polygonstrokearrow[1]/stroke", 0);
     assertXPath(pDocument, aXPathPrefix + 
"polygonstrokearrow[1]/linestartattribute/polypolygon",
-                "path", "m0-1 1 2h-2z");
+                "path"_ostr, "m0-1 1 2h-2z");
     assertXPath(pDocument, aXPathPrefix + 
"polygonstrokearrow[1]/lineendattribute", 0);
 
-    assertXPath(pDocument, aXPathPrefix + "polygonstrokearrow[2]/line", 
"width", "211");
+    assertXPath(pDocument, aXPathPrefix + "polygonstrokearrow[2]/line", 
"width"_ostr, "211");
     assertXPath(pDocument, aXPathPrefix + "polygonstrokearrow[2]/stroke", 0);
     assertXPath(pDocument, aXPathPrefix + 
"polygonstrokearrow[2]/linestartattribute/polypolygon",
-                "path", "m0-1 1 2h-2z");
+                "path"_ostr, "m0-1 1 2h-2z");
     assertXPath(pDocument, aXPathPrefix + 
"polygonstrokearrow[2]/lineendattribute", 0);
 
-    assertXPath(pDocument, aXPathPrefix + "polygonstrokearrow[3]/line", 
"width", "423");
+    assertXPath(pDocument, aXPathPrefix + "polygonstrokearrow[3]/line", 
"width"_ostr, "423");
     assertXPath(pDocument, aXPathPrefix + "polygonstrokearrow[3]/stroke", 0);
     assertXPath(pDocument, aXPathPrefix + 
"polygonstrokearrow[3]/linestartattribute", 0);
     assertXPath(pDocument, aXPathPrefix + 
"polygonstrokearrow[3]/lineendattribute/polypolygon",
-                "path", "m-1-1h2v2h-2z");
+                "path"_ostr, "m-1-1h2v2h-2z");
 
     assertXPath(pDocument, aXPathPrefix + "unifiedtransparence", 3);
-    assertXPath(pDocument, aXPathPrefix + "unifiedtransparence[1]", 
"transparence", "39");
+    assertXPath(pDocument, aXPathPrefix + "unifiedtransparence[1]", 
"transparence"_ostr, "39");
     assertXPath(pDocument,
                 aXPathPrefix
                     + 
"unifiedtransparence[1]/polygonstrokearrow/linestartattribute/polypolygon",
-                "path",
+                "path"_ostr,
                 "m-1 
1h2v-1l-0.0764-0.3827-0.2165-0.3244-0.3244-0.2165-0.3827-0.0764-0.3827 "
                 "0.0764-0.3244 0.2165-0.2165 0.3244-0.0764 0.3827z");
     assertXPath(pDocument,
                 aXPathPrefix
                     + 
"unifiedtransparence[1]/polygonstrokearrow/lineendattribute/polypolygon",
-                "path", "m-1 1h2v-1l-1-1-1 1z");
+                "path"_ostr, "m-1 1h2v-1l-1-1-1 1z");
     assertXPath(pDocument,
                 aXPathPrefix + 
"unifiedtransparence[2]/polygonstrokearrow/linestartattribute", 0);
     assertXPath(pDocument,
                 aXPathPrefix
                     + 
"unifiedtransparence[2]/polygonstrokearrow/lineendattribute/polypolygon",
-                "path", "m-1-1h2v2h-2z");
+                "path"_ostr, "m-1-1h2v2h-2z");
     assertXPath(pDocument,
                 aXPathPrefix
                     + 
"unifiedtransparence[3]/polygonstrokearrow/lineendattribute/polypolygon",
-                "path", "m0-1 1 1-0.5 0.5v0.5h-1v-0.5l-0.5-0.5z");
+                "path"_ostr, "m0-1 1 1-0.5 0.5v0.5h-1v-0.5l-0.5-0.5z");
 }
 
 CPPUNIT_TEST_FIXTURE(Test, testDrawLineWithDash)
@@ -400,44 +423,46 @@ CPPUNIT_TEST_FIXTURE(Test, testDrawLineWithDash)
 
     // check correct import of the DrawLine: color and width of the line
     assertXPath(pDocument, aXPathPrefix + "mask/polypolygonstroke", 10);
-    assertXPath(pDocument, aXPathPrefix + "mask/polypolygonstroke[1]/line", 
"color", "#000000");
-    assertXPath(pDocument, aXPathPrefix + "mask/polypolygonstroke[1]/line", 
"width", "185");
+    assertXPath(pDocument, aXPathPrefix + "mask/polypolygonstroke[1]/line", 
"color"_ostr,
+                "#000000");
+    assertXPath(pDocument, aXPathPrefix + "mask/polypolygonstroke[1]/line", 
"width"_ostr, "185");
     assertXPath(pDocument, aXPathPrefix + "mask/polypolygonstroke[1]/stroke", 
0);
 
-    assertXPath(pDocument, aXPathPrefix + "mask/polypolygonstroke[2]/line", 
"width", "185");
-    assertXPath(pDocument, aXPathPrefix + "mask/polypolygonstroke[2]/stroke", 
"dotDashArray",
+    assertXPath(pDocument, aXPathPrefix + "mask/polypolygonstroke[2]/line", 
"width"_ostr, "185");
+    assertXPath(pDocument, aXPathPrefix + "mask/polypolygonstroke[2]/stroke", 
"dotDashArray"_ostr,
                 "185 185 ");
-    assertXPath(pDocument, aXPathPrefix + "mask/polypolygonstroke[3]/line", 
"width", "185");
-    assertXPath(pDocument, aXPathPrefix + "mask/polypolygonstroke[3]/stroke", 
"dotDashArray",
+    assertXPath(pDocument, aXPathPrefix + "mask/polypolygonstroke[3]/line", 
"width"_ostr, "185");
+    assertXPath(pDocument, aXPathPrefix + "mask/polypolygonstroke[3]/stroke", 
"dotDashArray"_ostr,
                 "556 185 ");
-    assertXPath(pDocument, aXPathPrefix + "mask/polypolygonstroke[4]/line", 
"width", "185");
-    assertXPath(pDocument, aXPathPrefix + "mask/polypolygonstroke[4]/stroke", 
"dotDashArray",
+    assertXPath(pDocument, aXPathPrefix + "mask/polypolygonstroke[4]/line", 
"width"_ostr, "185");
+    assertXPath(pDocument, aXPathPrefix + "mask/polypolygonstroke[4]/stroke", 
"dotDashArray"_ostr,
                 "556 185 185 185 ");
-    assertXPath(pDocument, aXPathPrefix + "mask/polypolygonstroke[5]/line", 
"width", "370");
-    assertXPath(pDocument, aXPathPrefix + "mask/polypolygonstroke[5]/stroke", 
"dotDashArray",
+    assertXPath(pDocument, aXPathPrefix + "mask/polypolygonstroke[5]/line", 
"width"_ostr, "370");
+    assertXPath(pDocument, aXPathPrefix + "mask/polypolygonstroke[5]/stroke", 
"dotDashArray"_ostr,
                 "556 185 185 185 185 185 ");
 
     assertXPath(pDocument, aXPathPrefix + "mask/polygonstrokearrow", 2);
     //TODO polypolygonstroke[6-9]/stroke add support for 
PenDataDashedLineOffset
-    assertXPath(pDocument, aXPathPrefix + "mask/polygonstrokearrow[1]/line", 
"width", "370");
-    assertXPath(pDocument, aXPathPrefix + "mask/polygonstrokearrow[1]/stroke", 
"dotDashArray",
+    assertXPath(pDocument, aXPathPrefix + "mask/polygonstrokearrow[1]/line", 
"width"_ostr, "370");
+    assertXPath(pDocument, aXPathPrefix + "mask/polygonstrokearrow[1]/stroke", 
"dotDashArray"_ostr,
                 "1851 741 5554 1481 ");
     // Arrows on both ends
     assertXPath(pDocument,
-                aXPathPrefix + 
"mask/polygonstrokearrow[1]/linestartattribute/polypolygon", "path",
-                "m0-1 1 2h-2z");
+                aXPathPrefix + 
"mask/polygonstrokearrow[1]/linestartattribute/polypolygon",
+                "path"_ostr, "m0-1 1 2h-2z");
     assertXPath(pDocument, aXPathPrefix + 
"mask/polygonstrokearrow[1]/lineendattribute/polypolygon",
-                "path", "m0-1 1 2h-2z");
+                "path"_ostr, "m0-1 1 2h-2z");
 
-    assertXPath(pDocument, aXPathPrefix + "mask/polygonstrokearrow[2]/line", 
"width", "370");
-    assertXPath(pDocument, aXPathPrefix + "mask/polygonstrokearrow[2]/stroke", 
"dotDashArray",
+    assertXPath(pDocument, aXPathPrefix + "mask/polygonstrokearrow[2]/line", 
"width"_ostr, "370");
+    assertXPath(pDocument, aXPathPrefix + "mask/polygonstrokearrow[2]/stroke", 
"dotDashArray"_ostr,
                 "1852 741 5555 1481 ");
     assertXPath(pDocument,
-                aXPathPrefix + 
"mask/polygonstrokearrow[2]/linestartattribute/polypolygon", "path",
+                aXPathPrefix + 
"mask/polygonstrokearrow[2]/linestartattribute/polypolygon",
+                "path"_ostr,
                 "m-1 
1h2v-1l-0.0764-0.3827-0.2165-0.3244-0.3244-0.2165-0.3827-0.0764-0.3827 "
                 "0.0764-0.3244 0.2165-0.2165 0.3244-0.0764 0.3827z");
     assertXPath(pDocument, aXPathPrefix + 
"mask/polygonstrokearrow[2]/lineendattribute/polypolygon",
-                "path",
+                "path"_ostr,
                 "m-1 
1h2v-1l-0.0764-0.3827-0.2165-0.3244-0.3244-0.2165-0.3827-0.0764-0.3827 "
                 "0.0764-0.3244 0.2165-0.2165 0.3244-0.0764 0.3827z");
 }
@@ -451,34 +476,37 @@ CPPUNIT_TEST_FIXTURE(Test, testLinearGradient)
     xmlDocUniquePtr pDocument = 
dumper.dumpAndParse(Primitive2DContainer(aSequence));
     CPPUNIT_ASSERT(pDocument);
 
-    assertXPath(pDocument, "/primitive2D/metafile/transform", "xy11", "1");
-    assertXPath(pDocument, "/primitive2D/metafile/transform", "xy12", "0");
-    assertXPath(pDocument, "/primitive2D/metafile/transform", "xy13", "0");
-    assertXPath(pDocument, "/primitive2D/metafile/transform", "xy21", "0");
-    assertXPath(pDocument, "/primitive2D/metafile/transform", "xy22", "1");
-    assertXPath(pDocument, "/primitive2D/metafile/transform", "xy23", "0");
-    assertXPath(pDocument, aXPathPrefix + "mask/polypolygon", "height", 
"7610");
-    assertXPath(pDocument, aXPathPrefix + "mask/polypolygon", "width", 
"15232");
-    assertXPath(pDocument, aXPathPrefix + "mask/polypolygon", "path", "m0 
0h15232v7610h-15232z");
-
-    assertXPath(pDocument, aXPathPrefix + "mask/svglineargradient[1]", 
"spreadmethod", "repeat");
-    assertXPath(pDocument, aXPathPrefix + "mask/svglineargradient[1]", 
"startx", "0");
-    assertXPath(pDocument, aXPathPrefix + "mask/svglineargradient[1]", 
"starty", "-1");
-    assertXPath(pDocument, aXPathPrefix + "mask/svglineargradient[1]", "endx", 
"0");
-    assertXPath(pDocument, aXPathPrefix + "mask/svglineargradient[1]", "endy", 
"-1");
-    assertXPath(pDocument, aXPathPrefix + "mask/svglineargradient[1]", 
"opacity",
+    assertXPath(pDocument, "/primitive2D/metafile/transform"_ostr, 
"xy11"_ostr, "1");
+    assertXPath(pDocument, "/primitive2D/metafile/transform"_ostr, 
"xy12"_ostr, "0");
+    assertXPath(pDocument, "/primitive2D/metafile/transform"_ostr, 
"xy13"_ostr, "0");
+    assertXPath(pDocument, "/primitive2D/metafile/transform"_ostr, 
"xy21"_ostr, "0");
+    assertXPath(pDocument, "/primitive2D/metafile/transform"_ostr, 
"xy22"_ostr, "1");
+    assertXPath(pDocument, "/primitive2D/metafile/transform"_ostr, 
"xy23"_ostr, "0");
+    assertXPath(pDocument, aXPathPrefix + "mask/polypolygon", "height"_ostr, 
"7610");
+    assertXPath(pDocument, aXPathPrefix + "mask/polypolygon", "width"_ostr, 
"15232");
+    assertXPath(pDocument, aXPathPrefix + "mask/polypolygon", "path"_ostr,
+                "m0 0h15232v7610h-15232z");
+
+    assertXPath(pDocument, aXPathPrefix + "mask/svglineargradient[1]", 
"spreadmethod"_ostr,
+                "repeat");
+    assertXPath(pDocument, aXPathPrefix + "mask/svglineargradient[1]", 
"startx"_ostr, "0");
+    assertXPath(pDocument, aXPathPrefix + "mask/svglineargradient[1]", 
"starty"_ostr, "-1");
+    assertXPath(pDocument, aXPathPrefix + "mask/svglineargradient[1]", 
"endx"_ostr, "0");
+    assertXPath(pDocument, aXPathPrefix + "mask/svglineargradient[1]", 
"endy"_ostr, "-1");
+    assertXPath(pDocument, aXPathPrefix + "mask/svglineargradient[1]", 
"opacity"_ostr,
                 "0.392156862745098");
-    assertXPath(pDocument, aXPathPrefix + 
"mask/svglineargradient[1]/polypolygon", "path",
+    assertXPath(pDocument, aXPathPrefix + 
"mask/svglineargradient[1]/polypolygon", "path"_ostr,
                 "m0 
0.216110019646294h7615.75822989746v7610.21611001965h-7615.75822989746z");
 
-    assertXPath(pDocument, aXPathPrefix + "mask/svglineargradient[2]", 
"spreadmethod", "repeat");
-    assertXPath(pDocument, aXPathPrefix + "mask/svglineargradient[2]", 
"startx", "-1");
-    assertXPath(pDocument, aXPathPrefix + "mask/svglineargradient[2]", 
"starty", "-1");
-    assertXPath(pDocument, aXPathPrefix + "mask/svglineargradient[2]", "endx", 
"0");
-    assertXPath(pDocument, aXPathPrefix + "mask/svglineargradient[2]", "endy", 
"-1");
-    assertXPath(pDocument, aXPathPrefix + "mask/svglineargradient[2]", 
"opacity", "1");
+    assertXPath(pDocument, aXPathPrefix + "mask/svglineargradient[2]", 
"spreadmethod"_ostr,
+                "repeat");
+    assertXPath(pDocument, aXPathPrefix + "mask/svglineargradient[2]", 
"startx"_ostr, "-1");
+    assertXPath(pDocument, aXPathPrefix + "mask/svglineargradient[2]", 
"starty"_ostr, "-1");
+    assertXPath(pDocument, aXPathPrefix + "mask/svglineargradient[2]", 
"endx"_ostr, "0");
+    assertXPath(pDocument, aXPathPrefix + "mask/svglineargradient[2]", 
"endy"_ostr, "-1");
+    assertXPath(pDocument, aXPathPrefix + "mask/svglineargradient[2]", 
"opacity"_ostr, "1");
     assertXPath(
-        pDocument, aXPathPrefix + "mask/svglineargradient[2]/polypolygon", 
"path",
+        pDocument, aXPathPrefix + "mask/svglineargradient[2]/polypolygon", 
"path"_ostr,
         "m7615.75822989746 
0.216110019646294h7615.75822989746v7610.21611001965h-7615.75822989746z");
 }
 
@@ -493,29 +521,29 @@ CPPUNIT_TEST_FIXTURE(Test, testTextMapMode)
     CPPUNIT_ASSERT(pDocument);
 
     assertXPath(pDocument, aXPathPrefix + "polypolygoncolor", 2);
-    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[1]", "color", 
"#ffffff");
-    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[1]/polypolygon", 
"path",
+    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[1]", "color"_ostr, 
"#ffffff");
+    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[1]/polypolygon", 
"path"_ostr,
                 "m0 0h3542v4647h-3542z");
 
     assertXPath(pDocument, aXPathPrefix + "textsimpleportion", 20);
-    assertXPath(pDocument, aXPathPrefix + "textsimpleportion[1]", "text", "N");
-    assertXPath(pDocument, aXPathPrefix + "textsimpleportion[1]", "fontcolor", 
"#4a70e3");
-    assertXPath(pDocument, aXPathPrefix + "textsimpleportion[1]", "x", "2099");
-    assertXPath(pDocument, aXPathPrefix + "textsimpleportion[1]", "y", "1859");
+    assertXPath(pDocument, aXPathPrefix + "textsimpleportion[1]", "text"_ostr, 
"N");
+    assertXPath(pDocument, aXPathPrefix + "textsimpleportion[1]", 
"fontcolor"_ostr, "#4a70e3");
+    assertXPath(pDocument, aXPathPrefix + "textsimpleportion[1]", "x"_ostr, 
"2099");
+    assertXPath(pDocument, aXPathPrefix + "textsimpleportion[1]", "y"_ostr, 
"1859");
 
     assertXPath(pDocument, aXPathPrefix + "polygonstroke", 138);
     assertXPathContent(pDocument, aXPathPrefix + "polygonstroke[1]/polygon", 
"2142,1638 2142,1489");
-    assertXPath(pDocument, aXPathPrefix + "polygonstroke[1]/line", "color", 
"#4a70e3");
-    assertXPath(pDocument, aXPathPrefix + "polygonstroke[1]/line", "width", 
"11");
+    assertXPath(pDocument, aXPathPrefix + "polygonstroke[1]/line", 
"color"_ostr, "#4a70e3");
+    assertXPath(pDocument, aXPathPrefix + "polygonstroke[1]/line", 
"width"_ostr, "11");
 
     assertXPathContent(pDocument, aXPathPrefix + "polygonstroke[10]/polygon", 
"1967,1029 1869,952");
-    assertXPath(pDocument, aXPathPrefix + "polygonstroke[10]/line", "color", 
"#4a70e3");
-    assertXPath(pDocument, aXPathPrefix + "polygonstroke[10]/line", "width", 
"11");
+    assertXPath(pDocument, aXPathPrefix + "polygonstroke[10]/line", 
"color"_ostr, "#4a70e3");
+    assertXPath(pDocument, aXPathPrefix + "polygonstroke[10]/line", 
"width"_ostr, "11");
 
     assertXPathContent(pDocument, aXPathPrefix + "polygonstroke[20]/polygon",
                        "2710,1113 2873,1330");
-    assertXPath(pDocument, aXPathPrefix + "polygonstroke[20]/line", "color", 
"#666666");
-    assertXPath(pDocument, aXPathPrefix + "polygonstroke[20]/line", "width", 
"11");
+    assertXPath(pDocument, aXPathPrefix + "polygonstroke[20]/line", 
"color"_ostr, "#666666");
+    assertXPath(pDocument, aXPathPrefix + "polygonstroke[20]/line", 
"width"_ostr, "11");
 }
 
 CPPUNIT_TEST_FIXTURE(Test, testEnglishMapMode)
@@ -530,25 +558,25 @@ CPPUNIT_TEST_FIXTURE(Test, testEnglishMapMode)
     CPPUNIT_ASSERT(pDocument);
 
     assertXPath(pDocument, aXPathPrefix + "mask/polypolygon", 1);
-    assertXPath(pDocument, aXPathPrefix + "mask/polypolygon[1]", "path",
+    assertXPath(pDocument, aXPathPrefix + "mask/polypolygon[1]", "path"_ostr,
                 "m0 0h29699v20999h-29699z");
 
     assertXPath(pDocument, aXPathPrefix + "mask/polypolygoncolor", 3);
-    assertXPath(pDocument, aXPathPrefix + "mask/polypolygoncolor[1]", "color", 
"#ffffad");
-    assertXPath(pDocument, aXPathPrefix + 
"mask/polypolygoncolor[1]/polypolygon", "path",
+    assertXPath(pDocument, aXPathPrefix + "mask/polypolygoncolor[1]", 
"color"_ostr, "#ffffad");
+    assertXPath(pDocument, aXPathPrefix + 
"mask/polypolygoncolor[1]/polypolygon", "path"_ostr,
                 "m-1-1h29700v21001h-29700z");
-    assertXPath(pDocument, aXPathPrefix + 
"mask/polypolygoncolor[2]/polypolygon", "path",
+    assertXPath(pDocument, aXPathPrefix + 
"mask/polypolygoncolor[2]/polypolygon", "path"_ostr,
                 "m1058 7937v5293h3175v-1059h-2118v-4234z");
-    assertXPath(pDocument, aXPathPrefix + 
"mask/polypolygoncolor[3]/polypolygon", "path",
+    assertXPath(pDocument, aXPathPrefix + 
"mask/polypolygoncolor[3]/polypolygon", "path"_ostr,
                 "m12699 1058h4234v1060h-1587v4231h-1059v-4231h-1588z");
 
     assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion", 4);
-    assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion[1]", "text", 
"UL");
-    assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion[1]", 
"fontcolor", "#000000");
-    assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion[1]", "x", 
"106");
-    assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion[1]", "y", 
"459");
-    assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion[1]", 
"width", "424");
-    assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion[1]", 
"height", "424");
+    assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion[1]", 
"text"_ostr, "UL");
+    assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion[1]", 
"fontcolor"_ostr, "#000000");
+    assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion[1]", 
"x"_ostr, "106");
+    assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion[1]", 
"y"_ostr, "459");
+    assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion[1]", 
"width"_ostr, "424");
+    assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion[1]", 
"height"_ostr, "424");
 
     assertXPath(pDocument, aXPathPrefix + "mask/polygonhairline", 3);
     assertXPathContent(pDocument, aXPathPrefix + 
"mask/polygonhairline[1]/polygon",
@@ -572,8 +600,8 @@ CPPUNIT_TEST_FIXTURE(Test, 
testRectangleWithModifyWorldTransform)
     CPPUNIT_ASSERT(pDocument);
 
     assertXPath(pDocument, aXPathPrefix + "polypolygoncolor", 1);
-    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[1]", "color", 
"#ffffff");
-    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[1]/polypolygon", 
"path",
+    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[1]", "color"_ostr, 
"#ffffff");
+    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[1]/polypolygon", 
"path"_ostr,
                 "m1042 417 918 529 353 610-918-528z");
 
     assertXPath(pDocument, aXPathPrefix + "polygonstroke", 1);
@@ -591,8 +619,8 @@ CPPUNIT_TEST_FIXTURE(Test, 
testChordWithModifyWorldTransform)
     xmlDocUniquePtr pDocument = 
dumper.dumpAndParse(Primitive2DContainer(aSequence));
     CPPUNIT_ASSERT(pDocument);
 
-    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor", "color", 
"#ffffff");
-    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor/polypolygon", 
"path",
+    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor", "color"_ostr, 
"#ffffff");
+    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor/polypolygon", 
"path"_ostr,
                 "m590 448-21 45-66 24-34 12-33 12-21 45-33 12 12 33-33 12 12 
33 12 34 33-12 12 33 "
                 "34-12 33-12 45 21 33-12 33-12 46 21 66-25 33-12 66-24 34-12 
66-24z");
     assertXPathContent(pDocument, aXPathPrefix + "polygonstroke/polygon",
@@ -612,7 +640,8 @@ CPPUNIT_TEST_FIXTURE(Test, testArcStartPointEqualEndPoint)
     xmlDocUniquePtr pDocument = 
dumper.dumpAndParse(Primitive2DContainer(aSequence));
     CPPUNIT_ASSERT(pDocument);
 
-    assertXPath(pDocument, aXPathPrefix + "mask/group/mask/polygonhairline", 
"color", "#000000");
+    assertXPath(pDocument, aXPathPrefix + "mask/group/mask/polygonhairline", 
"color"_ostr,
+                "#000000");
     assertXPathContent(
         pDocument, aXPathPrefix + "mask/group/mask/polygonhairline/polygon",
         "11886,23133 11970,23223 12051,23316 12131,23410 12208,23506 
12282,23604 12354,23704 "
@@ -661,7 +690,7 @@ CPPUNIT_TEST_FIXTURE(Test, 
testArcInsideWronglyDefinedRectangle)
     xmlDocUniquePtr pDocument = 
dumper.dumpAndParse(Primitive2DContainer(aSequence));
     CPPUNIT_ASSERT(pDocument);
 
-    assertXPath(pDocument, aXPathPrefix + "polygonhairline", "color", 
"#000000");
+    assertXPath(pDocument, aXPathPrefix + "polygonhairline", "color"_ostr, 
"#000000");
     assertXPathContent(
         pDocument, aXPathPrefix + "polygonhairline/polygon",
         "1630,1460 1650,1470 1670,1480 1700,1490 1720,1500 1750,1510 1770,1520 
1800,1530 1820,1530 "
@@ -688,7 +717,7 @@ CPPUNIT_TEST_FIXTURE(Test, testEllipseWithSelectClipPath)
     CPPUNIT_ASSERT(pDocument);
 
     assertXPath(pDocument, aXPathPrefix + "group/mask/polypolygon", 1);
-    assertXPath(pDocument, aXPathPrefix + "group/mask/polypolygon[1]", "path",
+    assertXPath(pDocument, aXPathPrefix + "group/mask/polypolygon[1]", 
"path"_ostr,
                 "m2790 "
                 
"776v-36-35h-36v-35l-35-35-35-36h-36l-35-35-35-35h-35-36l-35-35h-35-36l-35-36h-35-"
                 
"36l-35-35h-35-71-35l-36-35h-70-35-36-70l-36-35h-35-71-35-71-35-71-35-35-71-35-71-"
@@ -699,9 +728,10 @@ CPPUNIT_TEST_FIXTURE(Test, testEllipseWithSelectClipPath)
                 "35l35-35h36 35l35-35h36 35l35-36h36 35l35-35 35-35h36l35-35 
35-36v-35h36v-35z");
 
     assertXPath(pDocument, aXPathPrefix + "group/mask/polypolygoncolor", 1);
-    assertXPath(pDocument, aXPathPrefix + "group/mask/polypolygoncolor[1]", 
"color", "#ffff00");
-    assertXPath(pDocument, aXPathPrefix + 
"group/mask/polypolygoncolor[1]/polypolygon[1]", "path",
-                "m353 353h2472v1057h-2472z");
+    assertXPath(pDocument, aXPathPrefix + "group/mask/polypolygoncolor[1]", 
"color"_ostr,
+                "#ffff00");
+    assertXPath(pDocument, aXPathPrefix + 
"group/mask/polypolygoncolor[1]/polypolygon[1]",
+                "path"_ostr, "m353 353h2472v1057h-2472z");
 
     assertXPath(pDocument, aXPathPrefix + "group/mask/polygonstroke", 1);
     assertXPathContent(pDocument, aXPathPrefix + 
"group/mask/polygonstroke[1]/polygon",
@@ -718,11 +748,11 @@ CPPUNIT_TEST_FIXTURE(Test, 
testEllipseXformIntersectClipRect)
     xmlDocUniquePtr pDocument = 
dumper.dumpAndParse(Primitive2DContainer(aSequence));
     CPPUNIT_ASSERT(pDocument);
 
-    assertXPath(pDocument, aXPathPrefix + "mask/polypolygon", "path", "m0 
0h3000v2000h-3000z");
-    assertXPath(pDocument, aXPathPrefix + "mask/group/mask/polypolygon", 
"path",
+    assertXPath(pDocument, aXPathPrefix + "mask/polypolygon", "path"_ostr, "m0 
0h3000v2000h-3000z");
+    assertXPath(pDocument, aXPathPrefix + "mask/group/mask/polypolygon", 
"path"_ostr,
                 "m370 152 1128-409 592 1623-1128 410z");
     assertXPath(
-        pDocument, aXPathPrefix + 
"mask/group/mask/polypolygoncolor/polypolygon", "path",
+        pDocument, aXPathPrefix + 
"mask/group/mask/polypolygoncolor/polypolygon", "path"_ostr,
         "m3613 287-12-33-12-33-12-33-12-33-33 12-12-34-13-33-45-21-12-33-33 "
         "12-12-33-45-21-46-21-12-33-33 12-12-33-45-21-33 12-46-21-45-21-33 
12-45-21-34 12-45-21-33 "
         "12-45-21-34 12-45-21-33 12-45-21-33 12-34 12-45-21-33 12-33 
12-45-21-34 12-66 24-45-21-33 "
@@ -774,16 +804,16 @@ CPPUNIT_TEST_FIXTURE(Test, testSetArcDirection)
     xmlDocUniquePtr pDocument = 
dumper.dumpAndParse(Primitive2DContainer(aSequence));
     CPPUNIT_ASSERT(pDocument);
 
-    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor", "color", 
"#ffffff");
+    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor", "color"_ostr, 
"#ffffff");
     assertXPath(
-        pDocument, aXPathPrefix + "polypolygoncolor/polypolygon", "path",
+        pDocument, aXPathPrefix + "polypolygoncolor/polypolygon", "path"_ostr,
         "m1640 1570-1000-950 50-50 50-50 50-50 50-40 60-40 50-40 60-30 60-40 
60-20 60-30 70-20 "
         "60-20 70-10 60-20h70l70-10h60 70l70 10 60 10 70 10 70 20 60 20 60 20 
70 30 60 30 60 30 50 "
         "40 60 40 50 40 50 40 50 50 50 50 50 50 40 60 40 60 40 60 30 60 30 60 
30 60 20 70 30 70 10 "
         "60 20 70 10 70 10 70 10 70v80 70l-10 70v70l-10 70-20 70-20 70z");
     assertXPath(pDocument, aXPathPrefix + "polygonhairline", 2);
-    assertXPath(pDocument, aXPathPrefix + "polygonhairline[1]", "color", 
"#000000");
-    assertXPath(pDocument, aXPathPrefix + "polygonhairline[2]", "color", 
"#000000");
+    assertXPath(pDocument, aXPathPrefix + "polygonhairline[1]", "color"_ostr, 
"#000000");
+    assertXPath(pDocument, aXPathPrefix + "polygonhairline[2]", "color"_ostr, 
"#000000");
     assertXPath(pDocument, aXPathPrefix + "polygonhairline", 2);
     assertXPathContent(
         pDocument, aXPathPrefix + "polygonhairline[1]/polygon",
@@ -822,20 +852,20 @@ CPPUNIT_TEST_FIXTURE(Test, testDrawPolyLine16WithClip)
     xmlDocUniquePtr pDocument = 
dumper.dumpAndParse(Primitive2DContainer(aSequence));
     CPPUNIT_ASSERT(pDocument);
 
-    assertXPath(pDocument, aXPathPrefix + "mask/polypolygon", "path", "m0 
0h3943v3939h-3943z");
+    assertXPath(pDocument, aXPathPrefix + "mask/polypolygon", "path"_ostr, "m0 
0h3943v3939h-3943z");
 
     assertXPath(pDocument, aXPathPrefix + "mask/polypolygoncolor", 1);
-    assertXPath(pDocument, aXPathPrefix + 
"mask/polypolygoncolor[1]/polypolygon", "path",
+    assertXPath(pDocument, aXPathPrefix + 
"mask/polypolygoncolor[1]/polypolygon", "path"_ostr,
                 "m1323 
0h1323v1322h1323v1322h-1323v1322h-1323v-1322h-1323v-1322h1323z");
-    assertXPath(pDocument, aXPathPrefix + "mask/polypolygoncolor[1]", "color", 
"#b4ffff");
+    assertXPath(pDocument, aXPathPrefix + "mask/polypolygoncolor[1]", 
"color"_ostr, "#b4ffff");
 
     assertXPath(pDocument, aXPathPrefix + "mask/polygonhairline", 1);
     assertXPathContent(pDocument, aXPathPrefix + 
"mask/polygonhairline[1]/polygon",
                        "1323,0 2646,0 2646,1322 3969,1322 3969,2644 2646,2644 
2646,3966 1323,3966 "
                        "1323,2644 0,2644 0,1322 1323,1322");
-    assertXPath(pDocument, aXPathPrefix + "mask/polygonhairline[1]", "color", 
"#000000");
+    assertXPath(pDocument, aXPathPrefix + "mask/polygonhairline[1]", 
"color"_ostr, "#000000");
 
-    assertXPath(pDocument, aXPathPrefix + "mask/group[1]/mask/polypolygon", 
"path",
+    assertXPath(pDocument, aXPathPrefix + "mask/group[1]/mask/polypolygon", 
"path"_ostr,
                 "m2646 
0v1322h1323v1322h-1323v1322h-1323v-1322h-1323v-1322h1323v-1322");
     assertXPathContent(pDocument, aXPathPrefix + 
"mask/group[1]/mask/polygonstroke/polygon",
                        "0,793 3969,4230");
@@ -850,18 +880,18 @@ CPPUNIT_TEST_FIXTURE(Test, testFillRegion)
     xmlDocUniquePtr pDocument = 
dumper.dumpAndParse(Primitive2DContainer(aSequence));
     CPPUNIT_ASSERT(pDocument);
 
-    assertXPath(pDocument, aXPathPrefix + "mask/polypolygon", "path", "m0 
0h3943v3939h-3943z");
+    assertXPath(pDocument, aXPathPrefix + "mask/polypolygon", "path"_ostr, "m0 
0h3943v3939h-3943z");
 
     assertXPath(pDocument, aXPathPrefix + "mask/polypolygoncolor", 1);
-    assertXPath(pDocument, aXPathPrefix + 
"mask/polypolygoncolor[1]/polypolygon", "path",
+    assertXPath(pDocument, aXPathPrefix + 
"mask/polypolygoncolor[1]/polypolygon", "path"_ostr,
                 "m1323 
0h1323v1322h1323v1322h-1323v1322h-1323v-1322h-1323v-1322h1323z");
-    assertXPath(pDocument, aXPathPrefix + "mask/polypolygoncolor[1]", "color", 
"#ff0000");
+    assertXPath(pDocument, aXPathPrefix + "mask/polypolygoncolor[1]", 
"color"_ostr, "#ff0000");
 
     assertXPath(pDocument, aXPathPrefix + "mask/polygonhairline", 1);
     assertXPathContent(pDocument, aXPathPrefix + 
"mask/polygonhairline[1]/polygon",
                        "1323,0 2646,0 2646,1322 3969,1322 3969,2644 2646,2644 
2646,3966 1323,3966 "
                        "1323,2644 0,2644 0,1322 1323,1322");
-    assertXPath(pDocument, aXPathPrefix + "mask/polygonhairline[1]", "color", 
"#000000");
+    assertXPath(pDocument, aXPathPrefix + "mask/polygonhairline[1]", 
"color"_ostr, "#000000");
 }
 
 CPPUNIT_TEST_FIXTURE(Test, testPolylinetoCloseStroke)
@@ -881,14 +911,14 @@ CPPUNIT_TEST_FIXTURE(Test, testPolylinetoCloseStroke)
         "420,450 370,490 330,530 290,570 260,610 230,660 200,700 170,750 
150,790 130,840 120,890 "
         "110,930 100,980 100,1030 100,1080 110,1130 120,1180 130,1220 140,1270 
160,1320 190,1360 "
         "210,1410 250,1450 280,1490 320,1540 360,1580 400,1620 450,1650 
500,1690");
-    assertXPath(pDocument, aXPathPrefix + "polygonhairline[1]", "color", 
"#000000");
+    assertXPath(pDocument, aXPathPrefix + "polygonhairline[1]", "color"_ostr, 
"#000000");
     assertXPathContent(
         pDocument, aXPathPrefix + "polygonhairline[2]/polygon",
         "1760,1120 1710,1130 1670,1140 1620,1150 1580,1160 1540,1170 1500,1180 
1460,1200 1420,1210 "
         "1380,1230 1350,1240 1320,1260 1290,1280 1260,1300 1230,1310 1210,1330 
1190,1360 1170,1380 "
         "1150,1400 1140,1420 1120,1440 1110,1460 1110,1490 1100,1510 1100,1530 
1100,1550 1100,1580 "
         "1110,1600 1120,1620 1130,1650 1140,1670 1160,1690 1170,1710 
1190,1730");
-    assertXPath(pDocument, aXPathPrefix + "polygonhairline[2]", "color", 
"#000000");
+    assertXPath(pDocument, aXPathPrefix + "polygonhairline[2]", "color"_ostr, 
"#000000");
 }
 
 CPPUNIT_TEST_FIXTURE(Test, testEmfPolydraw)
@@ -901,18 +931,18 @@ CPPUNIT_TEST_FIXTURE(Test, testEmfPolydraw)
     CPPUNIT_ASSERT(pDocument);
 
     assertXPath(pDocument, aXPathPrefix + "polygonhairline", 2);
-    assertXPath(pDocument, aXPathPrefix + "polygonhairline[1]", "color", 
"#000000");
+    assertXPath(pDocument, aXPathPrefix + "polygonhairline[1]", "color"_ostr, 
"#000000");
     assertXPathContent(pDocument, aXPathPrefix + "polygonhairline[1]/polygon",
                        "2000,200 3000,200 3000,1000");
-    assertXPath(pDocument, aXPathPrefix + "polygonhairline[2]", "color", 
"#000000");
+    assertXPath(pDocument, aXPathPrefix + "polygonhairline[2]", "color"_ostr, 
"#000000");
     assertXPathContent(pDocument, aXPathPrefix + "polygonhairline[2]/polygon",
                        "3000,2000 3000,2000 4000,2000 3000,3000");
 
     assertXPath(pDocument, aXPathPrefix + "polygonstroke", 1);
     assertXPathContent(pDocument, aXPathPrefix + "polygonstroke[1]/polygon",
                        "50,50 50,50 1000,1000 1000,1000 2000,2500 2000,1000");
-    assertXPath(pDocument, aXPathPrefix + "polygonstroke[1]/line", "color", 
"#ff0000");
-    assertXPath(pDocument, aXPathPrefix + "polygonstroke[1]/stroke", 
"dotDashArray", "30 10 ");
+    assertXPath(pDocument, aXPathPrefix + "polygonstroke[1]/line", 
"color"_ostr, "#ff0000");
+    assertXPath(pDocument, aXPathPrefix + "polygonstroke[1]/stroke", 
"dotDashArray"_ostr, "30 10 ");
 }
 
 CPPUNIT_TEST_FIXTURE(Test, testEmfPlusBrushPathGradientWithBlendColors)
@@ -925,12 +955,12 @@ CPPUNIT_TEST_FIXTURE(Test, 
testEmfPlusBrushPathGradientWithBlendColors)
     xmlDocUniquePtr pDocument = 
dumper.dumpAndParse(Primitive2DContainer(aSequence));
     CPPUNIT_ASSERT(pDocument);
 
-    assertXPath(pDocument, aXPathPrefix + "svgradialgradient", "radius", 
"0.7");
+    assertXPath(pDocument, aXPathPrefix + "svgradialgradient", "radius"_ostr, 
"0.7");
     assertXPath(pDocument, aXPathPrefix + "svgradialgradient/focalx", 0);
     assertXPath(pDocument, aXPathPrefix + "svgradialgradient/focaly", 0);
-    assertXPath(pDocument, aXPathPrefix + "svgradialgradient", "startx", "0");
-    assertXPath(pDocument, aXPathPrefix + "svgradialgradient", "starty", "0");
-    assertXPath(pDocument, aXPathPrefix + "svgradialgradient", "spreadmethod", 
"pad");
+    assertXPath(pDocument, aXPathPrefix + "svgradialgradient", "startx"_ostr, 
"0");
+    assertXPath(pDocument, aXPathPrefix + "svgradialgradient", "starty"_ostr, 
"0");
+    assertXPath(pDocument, aXPathPrefix + "svgradialgradient", 
"spreadmethod"_ostr, "pad");
 }
 
 CPPUNIT_TEST_FIXTURE(Test, testEmfPlusDrawCurve)
@@ -945,9 +975,10 @@ CPPUNIT_TEST_FIXTURE(Test, testEmfPlusDrawCurve)
     assertXPath(pDocument, aXPathPrefix + "mask/polypolygonstroke", 26);
 
     // Verify DrawCurve with tension=0.5, offset=0, segments=2
-    assertXPath(pDocument, aXPathPrefix + "mask/polypolygonstroke[3]/line", 
"color", "#ff0000");
+    assertXPath(pDocument, aXPathPrefix + "mask/polypolygonstroke[3]/line", 
"color"_ostr,
+                "#ff0000");
     assertXPath(
-        pDocument, aXPathPrefix + "mask/polypolygonstroke[3]/polypolygon", 
"path",
+        pDocument, aXPathPrefix + "mask/polypolygonstroke[3]/polypolygon", 
"path"_ostr,
         "m4121.5678588927 597.698391624308 124.350808427242 119.857180790532 
168.799608035277 "
         "163.249184432137 191.024007839294 186.003527805174 191.024007839294 
188.120210909643 "
         "168.799608035277 169.599233745543 124.350808427242 130.440596312875 
57.677609015188 "
@@ -957,9 +988,10 @@ CPPUNIT_TEST_FIXTURE(Test, testEmfPlusDrawCurve)
         "122.899912753206-14.8162665360123 62.3098588877929");
 
     // Verify DrawCurve with tension=1.125, offset=0, segments=3
-    assertXPath(pDocument, aXPathPrefix + "mask/polypolygonstroke[9]/line", 
"color", "#ff0000");
+    assertXPath(pDocument, aXPathPrefix + "mask/polypolygonstroke[9]/line", 
"color"_ostr,
+                "#ff0000");
     assertXPath(
-        pDocument, aXPathPrefix + "mask/polypolygonstroke[9]/polypolygon", 
"path",
+        pDocument, aXPathPrefix + "mask/polypolygonstroke[9]/polypolygon", 
"path"_ostr,
         "m6593.23860852523 4960.44685532205 129.113179813817 111.125862984599 
154.512493875552 "
         "132.292694029285 167.212150906418 147.109475760564 167.212150906418 
155.576208178439 "
         "154.512493875552 157.692891282907 129.113179813817 153.45952507397 
91.0142087212153 "
@@ -973,9 +1005,10 @@ CPPUNIT_TEST_FIXTURE(Test, testEmfPlusDrawCurve)
         "40.4815643729608-142.871141597256 25.135611865564");
 
     // Verify DrawCurve with tension=0.125, offset=0, segments=4
-    assertXPath(pDocument, aXPathPrefix + "mask/polypolygonstroke[13]/line", 
"color", "#ff0000");
+    assertXPath(pDocument, aXPathPrefix + "mask/polypolygonstroke[13]/line", 
"color"_ostr,
+                "#ff0000");
     assertXPath(
-        pDocument, aXPathPrefix + "mask/polypolygonstroke[13]/polypolygon", 
"path",
+        pDocument, aXPathPrefix + "mask/polypolygonstroke[13]/polypolygon", 
"path"_ostr,
         "m4121.5678588927 9267.6323875275 124.350808427242 119.857180790532 
168.799608035277 "
         "163.249184432138 191.024007839294 186.003527805173 191.024007839294 
188.120210909643 "
         "168.799608035277 169.599233745543 124.350808427242 130.440596312876 
57.677609015188 "
@@ -993,9 +1026,10 @@ CPPUNIT_TEST_FIXTURE(Test, testEmfPlusDrawCurve)
         "8255756981871-15.3459525073959");
 
     // Verify DrawCurve with tension=0.125, offset=1, segments=3
-    assertXPath(pDocument, aXPathPrefix + "mask/polypolygonstroke[18]/line", 
"color", "#ff0000");
+    assertXPath(pDocument, aXPathPrefix + "mask/polypolygonstroke[18]/line", 
"color"_ostr,
+                "#ff0000");
     assertXPath(
-        pDocument, aXPathPrefix + "mask/polypolygonstroke[18]/polypolygon", 
"path",
+        pDocument, aXPathPrefix + "mask/polypolygonstroke[18]/polypolygon", 
"path"_ostr,
         "m5162.41058304753 14700.2318678401 10.5830475257226 128.191620514377 
6.34982851543373 "
         "166.821087170927 2.11660950514397 185.606649723086-2.11660950514397 "
         "184.548308170854-6.34982851543373 163.646062514224-10.5830475257226 "
@@ -1006,9 +1040,10 @@ CPPUNIT_TEST_FIXTURE(Test, testEmfPlusDrawCurve)
         "56.1582486154312-70.6418422341994 23.7465385782562");
 
     // Verify DrawClosedCurve with tension=0.5
-    assertXPath(pDocument, aXPathPrefix + "mask/polypolygonstroke[22]/line", 
"color", "#ff0000");
+    assertXPath(pDocument, aXPathPrefix + "mask/polypolygonstroke[22]/line", 
"color"_ostr,
+                "#ff0000");
     assertXPath(
-        pDocument, aXPathPrefix + "mask/polypolygonstroke[22]/polypolygon", 
"path",
+        pDocument, aXPathPrefix + "mask/polypolygonstroke[22]/polypolygon", 
"path"_ostr,
         "m2709.26016658501 19012.0476443365v122.767620059174 173.568014566423 
198.968211820044 "
         "198.968211820044 173.568014566423 122.767620059174 
46.5670282983083l-46.5654091131796 "
         "23.283514149156-122.763351298383 61.383810029587-173.561979421852 "
@@ -1037,31 +1072,32 @@ CPPUNIT_TEST_FIXTURE(Test, testEmfPlusGetDC)
     xmlDocUniquePtr pDocument = 
dumper.dumpAndParse(Primitive2DContainer(aSequence));
     CPPUNIT_ASSERT(pDocument);
 
-    assertXPath(pDocument, aXPathPrefix + "textsimpleportion", "text", "sd 
CCCCCCCCCCCCCCC");
-    assertXPath(pDocument, aXPathPrefix + "textsimpleportion", "fontcolor", 
"#000000");
+    assertXPath(pDocument, aXPathPrefix + "textsimpleportion", "text"_ostr, 
"sd CCCCCCCCCCCCCCC");
+    assertXPath(pDocument, aXPathPrefix + "textsimpleportion", 
"fontcolor"_ostr, "#000000");
 
     assertXPath(pDocument, aXPathPrefix + "group", 5);
     assertXPath(
-        pDocument, aXPathPrefix + "group[4]/textsimpleportion", "text",
+        pDocument, aXPathPrefix + "group[4]/textsimpleportion", "text"_ostr,
         "Getttttttttttttttttttttttttttttt, uuuu: 
\"eeeeeeeeeeeeeeeeeeeeeee-7acd04a3953b\")");
-    assertXPath(pDocument, aXPathPrefix + "group[5]/textsimpleportion", "text",
+    assertXPath(pDocument, aXPathPrefix + "group[5]/textsimpleportion", 
"text"_ostr,
                 "TTTTTTTTTTTTTTTTTTTTTTTTTTTTT, trackId: 55)");
-    assertXPath(pDocument, aXPathPrefix + "group[5]/textsimpleportion", 
"fontcolor", "#000000");
+    assertXPath(pDocument, aXPathPrefix + "group[5]/textsimpleportion", 
"fontcolor"_ostr,
+                "#000000");
 
     assertXPath(pDocument, aXPathPrefix + "polypolygoncolor", 6);
-    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[1]/polypolygon", 
"path",
+    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[1]/polypolygon", 
"path"_ostr,
                 "m105.78125 "
                 
"776.111111111111h3878.64583333333l458.385416666667-493.888888888889v-176."
                 "388888888889h-4337.03125v670.277777777778");
-    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[1]", "color", 
"#ffffff");
+    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[1]", "color"_ostr, 
"#ffffff");
 
-    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[3]/polypolygon", 
"path",
+    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[3]/polypolygon", 
"path"_ostr,
                 "m2291.92708333333 
4550.83333333333h317.34375v-317.5h-317.34375z");
-    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[3]", "color", 
"#fcf2e3");
+    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[3]", "color"_ostr, 
"#fcf2e3");
 
-    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[6]/polypolygon", 
"path",
+    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[6]/polypolygon", 
"path"_ostr,
                 "m19428.4895833333 
6632.22222222222h317.34375v-2398.88888888889h-317.34375z");
-    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[6]", "color", 
"#fcf2e3");
+    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[6]", "color"_ostr, 
"#fcf2e3");
 
     assertXPath(pDocument, aXPathPrefix + "polypolygonstroke", 4);
     assertXPath(pDocument, aXPathPrefix + "polygonstrokearrow", 13);
@@ -1076,17 +1112,20 @@ CPPUNIT_TEST_FIXTURE(Test, testEmfPlusSave)
     xmlDocUniquePtr pDocument = 
dumper.dumpAndParse(Primitive2DContainer(aSequence));
     CPPUNIT_ASSERT(pDocument);
 
-    assertXPath(pDocument, aXPathPrefix + "mask/polypolygon", "path", "m0 
0h33544v21311h-33544z");
+    assertXPath(pDocument, aXPathPrefix + "mask/polypolygon", "path"_ostr,
+                "m0 0h33544v21311h-33544z");
 
-    assertXPath(pDocument, aXPathPrefix + 
"mask/group/mask/polypolygoncolor/polypolygon", "path",
+    assertXPath(pDocument, aXPathPrefix + 
"mask/group/mask/polypolygoncolor/polypolygon",
+                "path"_ostr,
                 "m327.458333333333 
638.222222222222h437007.1875v295555.555555556h-437007.1875z");
-    assertXPath(pDocument, aXPathPrefix + "mask/group/mask/polypolygoncolor", 
"color", "#ff0cad");
+    assertXPath(pDocument, aXPathPrefix + "mask/group/mask/polypolygoncolor", 
"color"_ostr,
+                "#ff0cad");
 
-    assertXPath(pDocument, aXPathPrefix + "mask/polypolygoncolor/polypolygon", 
"path",
+    assertXPath(pDocument, aXPathPrefix + "mask/polypolygoncolor/polypolygon", 
"path"_ostr,
                 "m10853.4145539602 
7321.41354709201h41952690v29630720h-41952690z");
-    assertXPath(pDocument, aXPathPrefix + "mask/polypolygoncolor", "color", 
"#00ffad");
+    assertXPath(pDocument, aXPathPrefix + "mask/polypolygoncolor", 
"color"_ostr, "#00ffad");
 
-    assertXPath(pDocument, aXPathPrefix + "mask/polygonstrokearrow/line", 
"color", "#000000");
+    assertXPath(pDocument, aXPathPrefix + "mask/polygonstrokearrow/line", 
"color"_ostr, "#000000");
     assertXPathContent(pDocument, aXPathPrefix + 
"mask/polygonstrokearrow/polygon",
                        "10853.4145539602,7321.41354709201 
10853.4145539602,4907.54325697157 "
                        "12832.6557236512,4907.54325697157");
@@ -1105,15 +1144,16 @@ CPPUNIT_TEST_FIXTURE(Test, 
testEmfPlusDrawPathWithCustomCap)
 
     assertXPathContent(pDocument, aXPathPrefix + "polygonstrokearrow/polygon",
                        "1423.297394625,1268.98481214025 
705.717657763014,1304.88786195939");
-    assertXPath(pDocument, aXPathPrefix + "polygonstrokearrow/line", "color", 
"#cc0000");
-    assertXPath(pDocument, aXPathPrefix + "polygonstrokearrow/line", "width", 
"96");
-    assertXPath(pDocument, aXPathPrefix + "polygonstrokearrow/line", 
"linecap", "BUTT");
+    assertXPath(pDocument, aXPathPrefix + "polygonstrokearrow/line", 
"color"_ostr, "#cc0000");
+    assertXPath(pDocument, aXPathPrefix + "polygonstrokearrow/line", 
"width"_ostr, "96");
+    assertXPath(pDocument, aXPathPrefix + "polygonstrokearrow/line", 
"linecap"_ostr, "BUTT");
     assertXPath(pDocument, aXPathPrefix + "polygonstrokearrow/stroke", 0);
     assertXPath(pDocument, aXPathPrefix + 
"polygonstrokearrow/linestartattribute", 0);
 
-    assertXPath(pDocument, aXPathPrefix + 
"polygonstrokearrow/lineendattribute", "centered", "0");
-    assertXPath(pDocument, aXPathPrefix + 
"polygonstrokearrow/lineendattribute/polypolygon", "path",
-                "m-1.5 3 1.5-3 1.5 3z");
+    assertXPath(pDocument, aXPathPrefix + 
"polygonstrokearrow/lineendattribute", "centered"_ostr,
+                "0");
+    assertXPath(pDocument, aXPathPrefix + 
"polygonstrokearrow/lineendattribute/polypolygon",
+                "path"_ostr, "m-1.5 3 1.5-3 1.5 3z");
 }
 
 CPPUNIT_TEST_FIXTURE(Test, testEmfPlusDrawPathWithMiterLimit)
@@ -1128,39 +1168,39 @@ CPPUNIT_TEST_FIXTURE(Test, 
testEmfPlusDrawPathWithMiterLimit)
     CPPUNIT_ASSERT(pDocument);
 
     assertXPath(pDocument, aXPathPrefix + "polypolygonstroke", 3);
-    assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[1]/line", 
"color", "#c800c8");
-    assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[1]/line", 
"width", "1057");
-    assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[1]/line", 
"linejoin", "Miter");
-    assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[1]/line", 
"miterangle", "5");
+    assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[1]/line", 
"color"_ostr, "#c800c8");
+    assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[1]/line", 
"width"_ostr, "1057");
+    assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[1]/line", 
"linejoin"_ostr, "Miter");
+    assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[1]/line", 
"miterangle"_ostr, "5");
     assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[1]/stroke", 0);
 
     assertXPath(pDocument, aXPathPrefix + "unifiedtransparence", 3);
-    assertXPath(pDocument, aXPathPrefix + "unifiedtransparence[1]", 
"transparence", "85");
-    assertXPath(pDocument, aXPathPrefix + 
"unifiedtransparence[1]/polypolygonstroke/line", "color",
-                "#6400c8");
-    assertXPath(pDocument, aXPathPrefix + 
"unifiedtransparence[1]/polypolygonstroke/line", "width",
-                "1057");
+    assertXPath(pDocument, aXPathPrefix + "unifiedtransparence[1]", 
"transparence"_ostr, "85");
+    assertXPath(pDocument, aXPathPrefix + 
"unifiedtransparence[1]/polypolygonstroke/line",
+                "color"_ostr, "#6400c8");
+    assertXPath(pDocument, aXPathPrefix + 
"unifiedtransparence[1]/polypolygonstroke/line",
+                "width"_ostr, "1057");
     assertXPath(pDocument, aXPathPrefix + 
"unifiedtransparence[1]/polypolygonstroke/line",
-                "linejoin", "Miter");
+                "linejoin"_ostr, "Miter");
     assertXPath(pDocument, aXPathPrefix + 
"unifiedtransparence[1]/polypolygonstroke/line",
-                "miterangle", "19");
-    assertXPath(pDocument, aXPathPrefix + "unifiedtransparence[2]", 
"transparence", "69");
+                "miterangle"_ostr, "19");
+    assertXPath(pDocument, aXPathPrefix + "unifiedtransparence[2]", 
"transparence"_ostr, "69");
     assertXPath(pDocument, aXPathPrefix + 
"unifiedtransparence[2]/polypolygonstroke/line",
-                "miterangle", "19");
-    assertXPath(pDocument, aXPathPrefix + "unifiedtransparence[3]", 
"transparence", "53");
+                "miterangle"_ostr, "19");
+    assertXPath(pDocument, aXPathPrefix + "unifiedtransparence[3]", 
"transparence"_ostr, "53");
     assertXPath(pDocument, aXPathPrefix + 
"unifiedtransparence[3]/polypolygonstroke/line",
-                "miterangle", "19");
+                "miterangle"_ostr, "19");
 
-    assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[2]/line", 
"color", "#0000ff");
-    assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[2]/line", 
"width", "1057");
-    assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[2]/line", 
"linejoin", "Miter");
-    assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[2]/line", 
"miterangle", "60");
+    assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[2]/line", 
"color"_ostr, "#0000ff");
+    assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[2]/line", 
"width"_ostr, "1057");
+    assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[2]/line", 
"linejoin"_ostr, "Miter");
+    assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[2]/line", 
"miterangle"_ostr, "60");
     assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[2]/stroke", 0);
 
-    assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[3]/line", 
"color", "#0000ff");
-    assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[3]/line", 
"width", "1057");
-    assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[3]/line", 
"linejoin", "Miter");
-    assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[3]/line", 
"miterangle", "60");
+    assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[3]/line", 
"color"_ostr, "#0000ff");
+    assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[3]/line", 
"width"_ostr, "1057");
+    assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[3]/line", 
"linejoin"_ostr, "Miter");
+    assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[3]/line", 
"miterangle"_ostr, "60");
     assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[3]/stroke", 0);
 }
 
@@ -1175,12 +1215,12 @@ CPPUNIT_TEST_FIXTURE(Test, testEmfPlusFillClosedCurve)
     CPPUNIT_ASSERT(pDocument);
 
     assertXPath(pDocument, aXPathPrefix + "polypolygoncolor", 2);
-    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[1]", "color", 
"#808080");
-    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[2]", "color", 
"#808080");
+    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[1]", "color"_ostr, 
"#808080");
+    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[2]", "color"_ostr, 
"#808080");
 
     // Validate curve generated by FillClosedCurve, tension=0.25
     assertXPath(
-        pDocument, aXPathPrefix + "polypolygoncolor[2]/polypolygon", "path",
+        pDocument, aXPathPrefix + "polypolygoncolor[2]/polypolygon", 
"path"_ostr,
         "m1305.97700269476 "
         
"808.572945906987-50.3314857912787-25.4001972536228-68.1076984321412-40.2169789849024-76."
         
"5824044585986-48.6837114027768-75.7556038706516-50.8003945072452-65.6272966683-46."
@@ -1202,7 +1242,7 @@ CPPUNIT_TEST_FIXTURE(Test, testEmfPlusFillClosedCurve)
 
     // Validate curve generated by DrawClosedCurve, tension=0.25
     assertXPath(
-        pDocument, aXPathPrefix + "polypolygonstroke[2]/polypolygon", "path",
+        pDocument, aXPathPrefix + "polypolygonstroke[2]/polypolygon", 
"path"_ostr,
         "m1305.97700269476 "
         
"808.572945906987-50.3314857912787-25.4001972536228-68.1076984321412-40.2169789849024-76."
         
"5824044585986-48.6837114027768-75.7556038706516-50.8003945072452-65.6272966683-46."
@@ -1223,13 +1263,13 @@ CPPUNIT_TEST_FIXTURE(Test, testEmfPlusFillClosedCurve)
         "87.1808853652984 18.0862628613424 64.4265419922616 2.5837518373346 
29.7658561565891z");
 
     assertXPath(pDocument, aXPathPrefix + "polypolygonstroke", 2);
-    assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[1]/line", 
"color", "#00ff00");
-    assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[1]/line", 
"width", "4");
-    assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[1]/line", 
"linejoin", "Miter");
-    assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[1]/line", 
"miterangle", "3");
-    assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[1]/line", 
"linecap", "BUTT");
-    assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[2]/line", 
"color", "#aaaa00");
-    assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[2]/line", 
"width", "4");
+    assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[1]/line", 
"color"_ostr, "#00ff00");
+    assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[1]/line", 
"width"_ostr, "4");
+    assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[1]/line", 
"linejoin"_ostr, "Miter");
+    assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[1]/line", 
"miterangle"_ostr, "3");
+    assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[1]/line", 
"linecap"_ostr, "BUTT");
+    assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[2]/line", 
"color"_ostr, "#aaaa00");
+    assertXPath(pDocument, aXPathPrefix + "polypolygonstroke[2]/line", 
"width"_ostr, "4");
 }
 
 CPPUNIT_TEST_FIXTURE(Test, testExtTextOutOpaqueAndClipTransform)
@@ -1243,46 +1283,48 @@ CPPUNIT_TEST_FIXTURE(Test, 
testExtTextOutOpaqueAndClipTransform)
     CPPUNIT_ASSERT(pDocument);
 
     assertXPath(pDocument, aXPathPrefix + "textsimpleportion", 2);
-    assertXPath(pDocument, aXPathPrefix + "textsimpleportion[1]", "text", 
"No_rect- DLP-");
-    assertXPath(pDocument, aXPathPrefix + "textsimpleportion[1]", "fontcolor", 
"#000000");
+    assertXPath(pDocument, aXPathPrefix + "textsimpleportion[1]", "text"_ostr, 
"No_rect- DLP-");
+    assertXPath(pDocument, aXPathPrefix + "textsimpleportion[1]", 
"fontcolor"_ostr, "#000000");
 
-    assertXPath(pDocument, aXPathPrefix + "textsimpleportion[2]", "text", 
"OpaqueTranspa");
-    assertXPath(pDocument, aXPathPrefix + "textsimpleportion[2]", "fontcolor", 
"#000000");
+    assertXPath(pDocument, aXPathPrefix + "textsimpleportion[2]", "text"_ostr, 
"OpaqueTranspa");
+    assertXPath(pDocument, aXPathPrefix + "textsimpleportion[2]", 
"fontcolor"_ostr, "#000000");
 
     assertXPath(pDocument, aXPathPrefix + "polypolygoncolor", 3);
-    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[1]/polypolygon", 
"path",
+    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[1]/polypolygon", 
"path"_ostr,
                 "m966 490-477-275-84 147 476 275z");
-    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[1]", "color", 
"#ff0000");
+    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[1]", "color"_ostr, 
"#ff0000");
 
-    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[2]/polypolygon", 
"path",
+    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[2]/polypolygon", 
"path"_ostr,
                 "m251 713 623 361-148 257-623-361z");
-    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[2]", "color", 
"#0080ff");
+    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[2]", "color"_ostr, 
"#0080ff");
 
-    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[3]/polypolygon", 
"path",
+    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[3]/polypolygon", 
"path"_ostr,
                 "m972 1326-476-275-148 257 476 276z");
-    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[3]", "color", 
"#800080");
+    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[3]", "color"_ostr, 
"#800080");
 
     assertXPath(pDocument, aXPathPrefix + "group", 3);
-    assertXPath(pDocument, aXPathPrefix + "group[1]/polypolygoncolor", 
"color", "#ff0000");
-    assertXPath(pDocument, aXPathPrefix + "group[1]/textsimpleportion", 
"text", "Opaque - DLP-");
-    assertXPath(pDocument, aXPathPrefix + "group[1]/textsimpleportion", 
"fontcolor", "#000000");
+    assertXPath(pDocument, aXPathPrefix + "group[1]/polypolygoncolor", 
"color"_ostr, "#ff0000");
+    assertXPath(pDocument, aXPathPrefix + "group[1]/textsimpleportion", 
"text"_ostr,
+                "Opaque - DLP-");
+    assertXPath(pDocument, aXPathPrefix + "group[1]/textsimpleportion", 
"fontcolor"_ostr,
+                "#000000");
 
-    assertXPath(pDocument, aXPathPrefix + 
"group[2]/mask/group/polypolygoncolor", "color",
+    assertXPath(pDocument, aXPathPrefix + 
"group[2]/mask/group/polypolygoncolor", "color"_ostr,
                 "#00ff00");
-    assertXPath(pDocument, aXPathPrefix + "group[2]/mask/polypolygon", "path",
+    assertXPath(pDocument, aXPathPrefix + "group[2]/mask/polypolygon", 
"path"_ostr,
                 "m320 508 586 340-169 293-586-339z");
-    assertXPath(pDocument, aXPathPrefix + 
"group[2]/mask/group/textsimpleportion", "text",
+    assertXPath(pDocument, aXPathPrefix + 
"group[2]/mask/group/textsimpleportion", "text"_ostr,
                 "Clip  -  DLP-");
-    assertXPath(pDocument, aXPathPrefix + 
"group[2]/mask/group/textsimpleportion", "fontcolor",
+    assertXPath(pDocument, aXPathPrefix + 
"group[2]/mask/group/textsimpleportion", "fontcolor"_ostr,
                 "#000000");
 
-    assertXPath(pDocument, aXPathPrefix + 
"group[3]/mask/group/polypolygoncolor", "color",
+    assertXPath(pDocument, aXPathPrefix + 
"group[3]/mask/group/polypolygoncolor", "color"_ostr,
                 "#0080ff");
-    assertXPath(pDocument, aXPathPrefix + "group[3]/mask/polypolygon", "path",
+    assertXPath(pDocument, aXPathPrefix + "group[3]/mask/polypolygon", 
"path"_ostr,
                 "m251 713 623 361-148 257-623-361z");
-    assertXPath(pDocument, aXPathPrefix + 
"group[3]/mask/group/textsimpleportion", "text",
+    assertXPath(pDocument, aXPathPrefix + 
"group[3]/mask/group/textsimpleportion", "text"_ostr,
                 "Opaque ClipP-");
-    assertXPath(pDocument, aXPathPrefix + 
"group[3]/mask/group/textsimpleportion", "fontcolor",
+    assertXPath(pDocument, aXPathPrefix + 
"group[3]/mask/group/textsimpleportion", "fontcolor"_ostr,
                 "#000000");
 }
 
@@ -1298,10 +1340,10 @@ CPPUNIT_TEST_FIXTURE(Test, testNegativeWinOrg)
     // and be lower and more to the right than it actually is which would cut 
the
     // text in the emf above in half.
     assertXPath(pDocument, aXPathPrefix + "mask/group[1]/mask/polypolygon", 1);
-    assertXPath(pDocument, aXPathPrefix + "mask/group[1]/mask/polypolygon", 
"minx", "0");
-    assertXPath(pDocument, aXPathPrefix + "mask/group[1]/mask/polypolygon", 
"miny", "272");
-    assertXPath(pDocument, aXPathPrefix + "mask/group[1]/mask/polypolygon", 
"maxx", "6800");
-    assertXPath(pDocument, aXPathPrefix + "mask/group[1]/mask/polypolygon", 
"maxy", "644");
+    assertXPath(pDocument, aXPathPrefix + "mask/group[1]/mask/polypolygon", 
"minx"_ostr, "0");
+    assertXPath(pDocument, aXPathPrefix + "mask/group[1]/mask/polypolygon", 
"miny"_ostr, "272");
+    assertXPath(pDocument, aXPathPrefix + "mask/group[1]/mask/polypolygon", 
"maxx"_ostr, "6800");
+    assertXPath(pDocument, aXPathPrefix + "mask/group[1]/mask/polypolygon", 
"maxy"_ostr, "644");
 }
 
 CPPUNIT_TEST_FIXTURE(Test, testBitBltStretchBltWMF)
@@ -1315,34 +1357,34 @@ CPPUNIT_TEST_FIXTURE(Test, testBitBltStretchBltWMF)
     CPPUNIT_ASSERT(pDocument);
 
     assertXPath(pDocument, aXPathPrefix + "mask/bitmap", 2);
-    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[1]", "xy11", "508");
-    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[1]", "xy12", "0");
-    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[1]", "xy13", "0");
-    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[1]", "xy21", "0");
-    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[1]", "xy22", "508");
-    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[1]", "xy23", "406");
-    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[1]", "height", "10");
-    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[1]", "width", "10");
+    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[1]", "xy11"_ostr, 
"508");
+    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[1]", "xy12"_ostr, "0");
+    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[1]", "xy13"_ostr, "0");
+    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[1]", "xy21"_ostr, "0");
+    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[1]", "xy22"_ostr, 
"508");
+    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[1]", "xy23"_ostr, 
"406");
+    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[1]", "height"_ostr, 
"10");
+    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[1]", "width"_ostr, 
"10");
     assertXPath(pDocument, aXPathPrefix + "mask/bitmap[1]/data", 10);
-    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[1]/data[1]", "row",
+    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[1]/data[1]", "row"_ostr,
                 
"000000,000000,000000,000000,000000,000000,000000,000000,000000,000000");
-    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[1]/data[4]", "row",
+    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[1]/data[4]", "row"_ostr,
                 
"000000,ffffff,000000,ffffff,000000,ffffff,000000,ffffff,000000,ffffff");
-    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[1]/data[5]", "row",
+    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[1]/data[5]", "row"_ostr,
                 
"ffffff,000000,ffffff,ffffff,000000,000000,000000,ffffff,ffffff,000000");
 
-    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[2]", "xy11", "1524");
-    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[2]", "xy12", "0");
-    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[2]", "xy13", "813");
-    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[2]", "xy21", "0");
-    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[2]", "xy22", "1016");
-    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[2]", "xy23", "0");
-    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[2]", "height", "10");
-    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[2]", "width", "10");
+    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[2]", "xy11"_ostr, 
"1524");
+    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[2]", "xy12"_ostr, "0");
+    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[2]", "xy13"_ostr, 
"813");
+    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[2]", "xy21"_ostr, "0");
+    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[2]", "xy22"_ostr, 
"1016");
+    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[2]", "xy23"_ostr, "0");
+    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[2]", "height"_ostr, 
"10");
+    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[2]", "width"_ostr, 
"10");
     assertXPath(pDocument, aXPathPrefix + "mask/bitmap[2]/data", 10);
-    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[2]/data[1]", "row",
+    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[2]/data[1]", "row"_ostr,
                 
"000000,00001c,000038,000055,000071,00008d,0000aa,0000c6,0000e2,0000ff");
-    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[2]/data[5]", "row",
+    assertXPath(pDocument, aXPathPrefix + "mask/bitmap[2]/data[5]", "row"_ostr,
                 
"720000,721c1c,723838,725555,727171,72728d,55728d,39728d,1d728d,00728d");
 }
 
@@ -1407,24 +1449,24 @@ CPPUNIT_TEST_FIXTURE(Test, testPaletteWMF)
     CPPUNIT_ASSERT(pDocument);
 
     assertXPath(pDocument, aXPathPrefix + "mask/polypolygoncolor", 2);
-    assertXPath(pDocument, aXPathPrefix + 
"mask/polypolygoncolor[1]/polypolygon", "path",
+    assertXPath(pDocument, aXPathPrefix + 
"mask/polypolygoncolor[1]/polypolygon", "path"_ostr,
                 "m0 0h3015v3015h-3015z");
-    assertXPath(pDocument, aXPathPrefix + "mask/polypolygoncolor[1]", "color", 
"#ffff00");
+    assertXPath(pDocument, aXPathPrefix + "mask/polypolygoncolor[1]", 
"color"_ostr, "#ffff00");
 
-    assertXPath(pDocument, aXPathPrefix + 
"mask/polypolygoncolor[2]/polypolygon", "path",
+    assertXPath(pDocument, aXPathPrefix + 
"mask/polypolygoncolor[2]/polypolygon", "path"_ostr,
                 "m2222 2222h2698v2698h-2698z");
-    assertXPath(pDocument, aXPathPrefix + "mask/polypolygoncolor[2]", "color", 
"#0080ff");
+    assertXPath(pDocument, aXPathPrefix + "mask/polypolygoncolor[2]", 
"color"_ostr, "#0080ff");
 
     assertXPath(pDocument, aXPathPrefix + "mask/polygonstroke", 2);
     assertXPathContent(pDocument, aXPathPrefix + 
"mask/polygonstroke[1]/polygon",
                        "0,0 3015,0 3015,3015 0,3015");
-    assertXPath(pDocument, aXPathPrefix + "mask/polygonstroke[1]/line", 
"color", "#ff0000");
-    assertXPath(pDocument, aXPathPrefix + "mask/polygonstroke[1]/line", 
"width", "132");
+    assertXPath(pDocument, aXPathPrefix + "mask/polygonstroke[1]/line", 
"color"_ostr, "#ff0000");
+    assertXPath(pDocument, aXPathPrefix + "mask/polygonstroke[1]/line", 
"width"_ostr, "132");
 
     assertXPathContent(pDocument, aXPathPrefix + 
"mask/polygonstroke[2]/polygon",
                        "2222,2222 4920,2222 4920,4920 2222,4920");
-    assertXPath(pDocument, aXPathPrefix + "mask/polygonstroke[2]/line", 
"color", "#ff0000");
-    assertXPath(pDocument, aXPathPrefix + "mask/polygonstroke[2]/line", 
"width", "132");
+    assertXPath(pDocument, aXPathPrefix + "mask/polygonstroke[2]/line", 
"color"_ostr, "#ff0000");
+    assertXPath(pDocument, aXPathPrefix + "mask/polygonstroke[2]/line", 
"width"_ostr, "132");
 }
 
 CPPUNIT_TEST_FIXTURE(Test, testRestoreDCWMF)
@@ -1437,22 +1479,22 @@ CPPUNIT_TEST_FIXTURE(Test, testRestoreDCWMF)
     CPPUNIT_ASSERT(pDocument);
 
     assertXPath(pDocument, aXPathPrefix + "polypolygoncolor", 3);
-    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[1]", "color", 
"#0000ff");
-    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[1]/polypolygon", 
"path",
+    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[1]", "color"_ostr, 
"#0000ff");
+    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[1]/polypolygon", 
"path"_ostr,
                 "m238 2884h1640v1110h-1640z");
-    assertXPath(pDocument, aXPathPrefix + "polygonhairline[1]", "color", 
"#000000");
+    assertXPath(pDocument, aXPathPrefix + "polygonhairline[1]", "color"_ostr, 
"#000000");
     assertXPathContent(pDocument, aXPathPrefix + "polygonhairline[1]/polygon",
                        "238,2884 1878,2884 1878,3994 238,3994");
 
-    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[2]", "color", 
"#ff0000");
-    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[2]/polypolygon", 
"path",
+    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[2]", "color"_ostr, 
"#ff0000");
+    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[2]/polypolygon", 
"path"_ostr,
                 "m238 238h1640v1110h-1640z");
-    assertXPath(pDocument, aXPathPrefix + "polygonhairline[2]", "color", 
"#000000");
+    assertXPath(pDocument, aXPathPrefix + "polygonhairline[2]", "color"_ostr, 
"#000000");
 
-    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[3]", "color", 
"#ff0000");
-    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[3]/polypolygon", 
"path",
+    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[3]", "color"_ostr, 
"#ff0000");
+    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[3]/polypolygon", 
"path"_ostr,
                 "m238 5530h1640v1110h-1640z");
-    assertXPath(pDocument, aXPathPrefix + "polygonhairline[3]", "color", 
"#000000");
+    assertXPath(pDocument, aXPathPrefix + "polygonhairline[3]", "color"_ostr, 
"#000000");
 }
 
 CPPUNIT_TEST_FIXTURE(Test, testRoundrectWMF)
@@ -1464,7 +1506,7 @@ CPPUNIT_TEST_FIXTURE(Test, testRoundrectWMF)
     xmlDocUniquePtr pDocument = 
dumper.dumpAndParse(Primitive2DContainer(aSequence));
     CPPUNIT_ASSERT(pDocument);
 
-    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor", "color", 
"#ffffff");
+    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor", "color"_ostr, 
"#ffffff");
 
     assertXPathContent(
         pDocument, aXPathPrefix + "polygonstroke/polygon",
@@ -1492,8 +1534,8 @@ CPPUNIT_TEST_FIXTURE(Test, testRoundrectWMF)
         "2802,1874 2810,1866 2810,1858 2818,1850 2818,1842 2826,1834 2826,1826 
2834,1818 2834,1810 "
         "2834,1802 2842,1794 2842,1786 2842,1778 2850,1770 2850,1762 2850,1746 
2850,1739 2850,1731 "
         "2858,1723 2858,1715 2858,1707 2858,1691 2858,1683 2858,1675 
2858,1667");
-    assertXPath(pDocument, aXPathPrefix + "polygonstroke/line", "color", 
"#000000");
-    assertXPath(pDocument, aXPathPrefix + "polygonstroke/line", "width", 
"143");
+    assertXPath(pDocument, aXPathPrefix + "polygonstroke/line", "color"_ostr, 
"#000000");
+    assertXPath(pDocument, aXPathPrefix + "polygonstroke/line", "width"_ostr, 
"143");
 }
 
 CPPUNIT_TEST_FIXTURE(Test, testStretchDIBWMF)
@@ -1505,19 +1547,19 @@ CPPUNIT_TEST_FIXTURE(Test, testStretchDIBWMF)
     xmlDocUniquePtr pDocument = 
dumper.dumpAndParse(Primitive2DContainer(aSequence));
     CPPUNIT_ASSERT(pDocument);
 
-    assertXPath(pDocument, aXPathPrefix + "mask/bitmap", "xy11", "12065");
-    assertXPath(pDocument, aXPathPrefix + "mask/bitmap", "xy12", "0");
-    assertXPath(pDocument, aXPathPrefix + "mask/bitmap", "xy13", "0");
-    assertXPath(pDocument, aXPathPrefix + "mask/bitmap", "xy21", "0");
-    assertXPath(pDocument, aXPathPrefix + "mask/bitmap", "xy22", "12065");
-    assertXPath(pDocument, aXPathPrefix + "mask/bitmap", "xy23", "0");
+    assertXPath(pDocument, aXPathPrefix + "mask/bitmap", "xy11"_ostr, "12065");
+    assertXPath(pDocument, aXPathPrefix + "mask/bitmap", "xy12"_ostr, "0");
+    assertXPath(pDocument, aXPathPrefix + "mask/bitmap", "xy13"_ostr, "0");
+    assertXPath(pDocument, aXPathPrefix + "mask/bitmap", "xy21"_ostr, "0");
+    assertXPath(pDocument, aXPathPrefix + "mask/bitmap", "xy22"_ostr, "12065");
+    assertXPath(pDocument, aXPathPrefix + "mask/bitmap", "xy23"_ostr, "0");
 
-    assertXPath(pDocument, aXPathPrefix + "mask/bitmap", "height", "10");
-    assertXPath(pDocument, aXPathPrefix + "mask/bitmap", "width", "10");
+    assertXPath(pDocument, aXPathPrefix + "mask/bitmap", "height"_ostr, "10");
+    assertXPath(pDocument, aXPathPrefix + "mask/bitmap", "width"_ostr, "10");
     assertXPath(pDocument, aXPathPrefix + "mask/bitmap/data", 10);
-    assertXPath(pDocument, aXPathPrefix + "/mask/bitmap/data[1]", "row",
+    assertXPath(pDocument, aXPathPrefix + "/mask/bitmap/data[1]", "row"_ostr,
                 
"000000,00001c,000038,000055,000071,00008d,0000aa,0000c6,0000e2,0000ff");
-    assertXPath(pDocument, aXPathPrefix + "/mask/bitmap/data[5]", "row",
+    assertXPath(pDocument, aXPathPrefix + "/mask/bitmap/data[5]", "row"_ostr,
                 
"720000,721c1c,723838,725555,727171,72728d,55728d,39728d,1d728d,00728d");
 }
 
@@ -1532,10 +1574,10 @@ CPPUNIT_TEST_FIXTURE(Test, testMoveToLineToWMF)
 
     assertXPathContent(pDocument, aXPathPrefix + "polygonstroke/polygon",
                        "5856,3586 7167,621 8625,3586");
-    assertXPath(pDocument, aXPathPrefix + "polygonstroke/line", "color", 
"#800000");
-    assertXPath(pDocument, aXPathPrefix + "polygonstroke/line", "width", 
"310");
-    assertXPath(pDocument, aXPathPrefix + "polygonstroke/line", "linejoin", 
"Bevel");
-    assertXPath(pDocument, aXPathPrefix + "polygonstroke/line", "linecap", 
"ROUND");
+    assertXPath(pDocument, aXPathPrefix + "polygonstroke/line", "color"_ostr, 
"#800000");
+    assertXPath(pDocument, aXPathPrefix + "polygonstroke/line", "width"_ostr, 
"310");
+    assertXPath(pDocument, aXPathPrefix + "polygonstroke/line", 
"linejoin"_ostr, "Bevel");
+    assertXPath(pDocument, aXPathPrefix + "polygonstroke/line", 
"linecap"_ostr, "ROUND");
 }
 
 CPPUNIT_TEST_FIXTURE(Test, testPolyLineWidth)
@@ -1547,14 +1589,14 @@ CPPUNIT_TEST_FIXTURE(Test, testPolyLineWidth)
     xmlDocUniquePtr pDocument = 
dumper.dumpAndParse(Primitive2DContainer(aSequence));
     CPPUNIT_ASSERT(pDocument);
 
-    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor/polypolygon", 
"path",
+    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor/polypolygon", 
"path"_ostr,
                 "m530 529 1236-176-707 352z");
-    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor", "color", 
"#ffff00");
+    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor", "color"_ostr, 
"#ffff00");
 
     assertXPathContent(pDocument, aXPathPrefix + "polygonstroke/polygon",
                        "530,529 530,529 1766,353 1059,705");
-    assertXPath(pDocument, aXPathPrefix + "polygonstroke/line", "color", 
"#000000");
-    assertXPath(pDocument, aXPathPrefix + "polygonstroke/line", "width", "71");
+    assertXPath(pDocument, aXPathPrefix + "polygonstroke/line", "color"_ostr, 
"#000000");
+    assertXPath(pDocument, aXPathPrefix + "polygonstroke/line", "width"_ostr, 
"71");
 }
 
 CPPUNIT_TEST_FIXTURE(Test, testRestoreDC)
@@ -1566,10 +1608,10 @@ CPPUNIT_TEST_FIXTURE(Test, testRestoreDC)
     xmlDocUniquePtr pDocument = 
dumper.dumpAndParse(Primitive2DContainer(aSequence));
     CPPUNIT_ASSERT(pDocument);
 
-    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor", "color", 
"#ff0000");
-    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor/polypolygon", 
"path",
+    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor", "color"_ostr, 
"#ff0000");
+    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor/polypolygon", 
"path"_ostr,
                 "m1148 4354v1481h4943v-1481z");
-    assertXPath(pDocument, aXPathPrefix + "polygonhairline", "color", 
"#000000");
+    assertXPath(pDocument, aXPathPrefix + "polygonhairline", "color"_ostr, 
"#000000");
     assertXPathContent(pDocument, aXPathPrefix + "polygonhairline/polygon",
                        "1148,4354 1148,5835 6091,5835 6091,4354");
 }
@@ -1584,17 +1626,17 @@ CPPUNIT_TEST_FIXTURE(Test, testRoundRect)
     CPPUNIT_ASSERT(pDocument);
 
     assertXPath(pDocument, aXPathPrefix + "polypolygoncolor", 2);
-    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[1]/polypolygon", 
"path",
+    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[1]/polypolygon", 
"path"_ostr,
                 "m100 100h4000v2000h-4000z");
-    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[1]", "color", 
"#ffffff");
+    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[1]", "color"_ostr, 
"#ffffff");
 
     assertXPath(pDocument, aXPathPrefix + "polygonstroke", 2);
     assertXPathContent(pDocument, aXPathPrefix + "polygonstroke[1]/polygon",
                        "100,100 4100,100 4100,2100 100,2100");
-    assertXPath(pDocument, aXPathPrefix + "polygonstroke[1]/line", "color", 
"#ff0000");
+    assertXPath(pDocument, aXPathPrefix + "polygonstroke[1]/line", 
"color"_ostr, "#ff0000");
 
     assertXPath(
-        pDocument, aXPathPrefix + "polypolygoncolor[2]/polypolygon", "path",
+        pDocument, aXPathPrefix + "polypolygoncolor[2]/polypolygon", 
"path"_ostr,
         "m4090 "
         
"2700v-30-20l-10-30v-20l-10-30-10-20-10-20-20-30-10-20-20-20-20-20-20-30-20-20-20-20-20-10-"
         
"30-20-20-20-30-20-30-10-30-10-30-20-30-10-30-10-40-10-30-10h-30l-40-10h-30l-40-10h-30-40-"
@@ -1604,7 +1646,7 @@ CPPUNIT_TEST_FIXTURE(Test, testRoundRect)
         "30 20 20 20 30 20 30 10 30 10 30 20 30 10 30 10 40 10 30 10h30l40 
10h30l40 10h30 40 2590 "
         "40 30l40-10h30l40-10h30l30-10 40-10 30-10 30-10 30-20 30-10 30-10 
30-20 20-20 30-20 20-10 "
         "20-20 20-20 20-30 20-20 20-20 10-20 20-30 10-20 10-20 
10-30v-20l10-30v-20-30z");
-    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[2]", "color", 
"#ffffff");
+    assertXPath(pDocument, aXPathPrefix + "polypolygoncolor[2]", "color"_ostr, 
"#ffffff");
 
     assertXPathContent(
         pDocument, aXPathPrefix + "polygonstroke[2]/polygon",
@@ -1622,7 +1664,7 @@ CPPUNIT_TEST_FIXTURE(Test, testRoundRect)
         "3700,4140 3730,4130 3760,4110 3790,4100 3820,4090 3850,4070 3870,4050 
3900,4030 3920,4020 "
         "3940,4000 3960,3980 3980,3950 4000,3930 4020,3910 4030,3890 4050,3860 
4060,3840 4070,3820 "
         "4080,3790 4080,3770 4090,3740 4090,3720 4090,3690");
-    assertXPath(pDocument, aXPathPrefix + "polygonstroke[2]/line", "color", 
"#ff0000");
+    assertXPath(pDocument, aXPathPrefix + "polygonstroke[2]/line", 
"color"_ostr, "#ff0000");
 }
 
 CPPUNIT_TEST_FIXTURE(Test, testCreatePen)
@@ -1635,49 +1677,51 @@ CPPUNIT_TEST_FIXTURE(Test, testCreatePen)
     xmlDocUniquePtr pDocument = 
dumper.dumpAndParse(Primitive2DContainer(aSequence));
     CPPUNIT_ASSERT(pDocument);
 
-    assertXPath(pDocument, aXPathPrefix + "mask/polypolygon", "path", "m0 
0h31250v18192h-31250z");
+    assertXPath(pDocument, aXPathPrefix + "mask/polypolygon", "path"_ostr,
+                "m0 0h31250v18192h-31250z");
 
     assertXPath(pDocument, aXPathPrefix + "mask/polygonstroke", 3);
     assertXPathContent(pDocument, aXPathPrefix + 
"mask/polygonstroke[1]/polygon",
                        "17898,5693 20172,5693");
-    assertXPath(pDocument, aXPathPrefix + "mask/polygonstroke[1]/line", 
"color", "#008000");
-    assertXPath(pDocument, aXPathPrefix + "mask/polygonstroke[1]/line", 
"width", "0");
+    assertXPath(pDocument, aXPathPrefix + "mask/polygonstroke[1]/line", 
"color"_ostr, "#008000");
+    assertXPath(pDocument, aXPathPrefix + "mask/polygonstroke[1]/line", 
"width"_ostr, "0");
 
     assertXPathContent(pDocument, aXPathPrefix + 
"mask/polygonstroke[2]/polygon",
                        "17898,6959 20172,6959");
-    assertXPath(pDocument, aXPathPrefix + "mask/polygonstroke[2]/line", 
"color", "#000080");
-    assertXPath(pDocument, aXPathPrefix + "mask/polygonstroke[2]/line", 
"width", "0");
+    assertXPath(pDocument, aXPathPrefix + "mask/polygonstroke[2]/line", 
"color"_ostr, "#000080");
+    assertXPath(pDocument, aXPathPrefix + "mask/polygonstroke[2]/line", 
"width"_ostr, "0");
 
     assertXPathContent(pDocument, aXPathPrefix + 
"mask/polygonstroke[3]/polygon",
                        "17898,7381 20172,7381");
-    assertXPath(pDocument, aXPathPrefix + "mask/polygonstroke[3]/line", 
"color", "#ff0000");
-    assertXPath(pDocument, aXPathPrefix + "mask/polygonstroke[3]/line", 
"width", "0");
+    assertXPath(pDocument, aXPathPrefix + "mask/polygonstroke[3]/line", 
"color"_ostr, "#ff0000");
+    assertXPath(pDocument, aXPathPrefix + "mask/polygonstroke[3]/line", 
"width"_ostr, "0");
 
     assertXPath(pDocument, aXPathPrefix + "mask/polygonhairline", 755);
-    assertXPath(pDocument, aXPathPrefix + "mask/polygonhairline[5]", "color", 
"#ff0000");
+    assertXPath(pDocument, aXPathPrefix + "mask/polygonhairline[5]", 
"color"_ostr, "#ff0000");
     assertXPathContent(pDocument, aXPathPrefix + 
"mask/polygonhairline[5]/polygon",
                        "27925,16078 27875,16078");
-    assertXPath(pDocument, aXPathPrefix + "mask/polygonhairline[10]", "color", 
"#ff0000");
+    assertXPath(pDocument, aXPathPrefix + "mask/polygonhairline[10]", 
"color"_ostr, "#ff0000");
     assertXPathContent(pDocument, aXPathPrefix + 
"mask/polygonhairline[10]/polygon",
                        "27925,14180 27875,14180");
 
     assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion", 69);
-    assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion[1]", 
"width", "374");
-    assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion[1]", "x", 
"28124");
-    assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion[1]", "y", 
"16581");
-    assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion[1]", "text", 
"0.0");
-    assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion[1]", 
"fontcolor", "#000000");
-
-    assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion[10]", 
"width", "266");
-    assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion[10]", "x", 
"28000");
-    assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion[10]", "y", 
"428");
-    assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion[10]", 
"text", "-6");
-    assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion[10]", 
"fontcolor", "#000000");
+    assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion[1]", 
"width"_ostr, "374");
+    assertXPath(pDocument, aXPathPrefix + "mask/textsimpleportion[1]", 
"x"_ostr, "28124");

... etc. - the rest is truncated

Reply via email to