Changeset 920 for XmlTools2


Ignore:
Timestamp:
Feb 2, 2014, 7:50:10 PM (11 years ago)
Author:
s10k
Message:

more fixes and updated examples

Location:
XmlTools2
Files:
14 edited

Legend:

Unmodified
Added
Removed
  • XmlTools2/examples/BINACJBOCharacter.oni-patch

    r919 r920  
     1#########################################################################################
     2############################## XmlTools Patch File Example ##############################
     3#########################################################################################
     4
     5########## Comments in patch files begin with '#'
     6
     7########## You can comment and uncomment commands to see their effect
     8########## in BINACJBOCharacter.xml file
     9
     10# The following row is always required in a XmlTools patch.
     11# It defines the minimum version of XmlTools executable that it requires.
    112@XML_TOOLS Version "2.0"
    213
    3 #@ADD_INSIDE_NODE ElementName "Particles"
    4 <xml>
    5              <Particle>
    6                  <Start>0</Start>
    7                  <End>45</End>
    8                  <Bone>Head</Bone>
    9                  <Name>glass_break</Name>
    10              </Particle>
    11 </xml>
    12 
    13 @ADD_INSIDE_NODE ElementName "OSD" Files "BINACJBOCharacter-van.xml"
     14# This command adds a new XML node (inside of <xml></xml> tags) to all OSD named nodes.
     15@ADD_INSIDE_NODES ElementName "OSD" Files "BINACJBOCharacter.xml"
    1416<xml>
    1517                <Attack>
     
    2830</xml>
    2931
    30 #@ADD_INSIDE_NODE ElementName "Attacks"
     32# This command removes the nodes inserted in the previous command using ElementName and ParentElementName.
     33@REMOVE_NODES ElementName "Attack" ParentElementName "OSD" Files "BINACJBOCharacter.xml"
     34
     35# This command adds a new XML node (inside of <xml></xml> tags) to the nodes that matches the XPathExpression.
     36@ADD_INSIDE_NODES XPathExpression "/Oni/Objects/CHAR/OSD" Files "BINACJBOCharacter.xml"
    3137<xml>
    32                                 <Attack>
    33                  <Start>31</Start>
    34                  <End>44</End>
    35                  <Bones>Chest Neck LeftShoulder RightShoulder</Bones>
    36                  <Flags>Unblockable</Flags>
    37                  <Knockback>0</Knockback>
    38                  <HitPoints>5</HitPoints>
    39                  <HitType>HitBody</HitType>
    40                  <HitLength>40</HitLength>
    41                  <StunLength>0</StunLength>
    42                  <StaggerLength>0</StaggerLength>
    43                  <Extents />
    44              </Attack>
     38                <Attack>
     39                        <Start>0</Start>
     40                        <End>30</End>
     41                        <Bones>Pelvis Chest Neck Head LeftShoulder LeftArm LeftWrist LeftFist RightShoulder RightArm RightWrist RightFist</Bones>
     42                        <Flags>Unblockable</Flags>
     43                        <Knockback>0</Knockback>
     44                        <HitPoints>10</HitPoints>
     45                        <HitType>KnockdownBody</HitType>
     46                        <HitLength>0</HitLength>
     47                        <StunLength>0</StunLength>
     48                        <StaggerLength>0</StaggerLength>
     49                        <Extents/>
     50                </Attack>
    4551</xml>
    4652
    47 #@ADD_INSIDE_NODE ElementName "Animation"
    48 <xml>
    49          <AttackRing>
    50              <Length>0</Length>
    51              <Length>0</Length>
    52              <Length>0</Length>
    53              <Length>0</Length>
    54              <Length>0</Length>
    55              <Length>0</Length>
    56              <Length>0</Length>
    57              <Length>0</Length>
    58              <Length>0</Length>
    59              <Length>0</Length>
    60              <Length>0</Length>
    61              <Length>0</Length>
    62              <Length>0</Length>
    63              <Length>0</Length>
    64              <Length>0</Length>
    65              <Length>0</Length>
    66              <Length>0</Length>
    67              <Length>0</Length>
    68              <Length>0</Length>
    69              <Length>0</Length>
    70              <Length>0</Length>
    71              <Length>0</Length>
    72              <Length>0</Length>
    73              <Length>0</Length>
    74              <Length>0</Length>
    75              <Length>0</Length>
    76              <Length>0</Length>
    77              <Length>0</Length>
    78              <Length>0</Length>
    79              <Length>0</Length>
    80              <Length>0</Length>
    81              <Length>0</Length>
    82              <Length>0</Length>
    83              <Length>0</Length>
    84              <Length>0</Length>
    85              <Length>0</Length>
    86          </AttackRing>
    87 </xml>
     53# This command removes the nodes inserted in the previous command using an XPathExpression.
     54@REMOVE_NODES XPathExpression "/Oni/Objects/CHAR/OSD/Attack" Files "BINACJBOCharacter.xml"
    8855
    89 #@REMOVE_NODE ElementName "Objects" ParentElementName "Oni" Files "BINACJBOCharacter-van.xml"
     56# This command executes any of the XmlTools commands (see all possible command using XmlTools --help)
     57@COMMAND Arguments "--files 'BINACJBOCharacter.xml' --element-name 'Position' --invert-elements"
    9058
    91 #@COMMAND "-?"
     59# This command executes the javascript inside the (inside of <code></code> tags)
    9260
    93 #@CUSTOM_CODE Files "BINACJBOCharacter-van.xml"
     61# The current javascript code first gets the element name "CHAR" with an attribute Id=11565
     62# then it gets the child element "OSD" and set its Weapon element value to "MyAwesomeOniWeapon"
     63@CUSTOM_CODE Files "BINACJBOCharacter.xml"
    9464<code>
    95   var myBuilder = new JSXMLBuilder();
    96  myBuilder.load($xmlData);
     65        var myBuilder = new JSXMLBuilder();
     66        myBuilder.load($xmlData);
    9767
    98  var elements = myBuilder.elements;
     68        var elements = myBuilder.elements;
    9969 
    10070        for (var i = 0; i < elements.length; i++) {
  • XmlTools2/examples/BINACJBOCharacter.xml

    r919 r920  
    1 <?xml version="1.0"?>
    21<Oni>
    32        <Objects>
     
    54                        <Header>
    65                                <Flags />
    7                                 <Position>2.23520136 AddedXmlTools2 -28.0006142</Position>
    8                                 <Position>395.682281 AddedXmlTools2 161.52861</Position>
    9                                 <Position>205.1952 AddedXmlTools2 37.781311</Position>
     6                                <Position>227.145248 756 -403.65567</Position>
    107                                <Rotation>0 184.086075 0</Rotation>
    118                        </Header>
     
    7875                        <Header>
    7976                                <Flags />
    80                                 <Position>241.037384 AddedXmlTools2 -140.612183</Position>
     77                                <Position>501.63855 756 223.189484</Position>
    8178                                <Rotation>0 357.120178 0</Rotation>
    8279                        </Header>
     
    149146                        <Header>
    150147                                <Flags />
    151                                 <Position>326.930817 AddedXmlTools2 -224.495468</Position>
     148                                <Position>-37.3426628 756 -491.6369</Position>
    152149                                <Rotation>0 221.15564 0</Rotation>
    153150                        </Header>
     
    220217                        <Header>
    221218                                <Flags />
    222                                 <Position>61.4552727 AddedXmlTools2 -273.230347</Position>
     219                                <Position>132.760071 756 247.212509</Position>
    223220                                <Rotation>0 15.3564777 0</Rotation>
    224221                        </Header>
     
    291288                        <Header>
    292289                                <Flags />
    293                                 <Position>-69.8346939 AddedXmlTools2 80.71216</Position>
     290                                <Position>196.638962 756 -9.086177</Position>
    294291                                <Rotation>0 40.0643044 0</Rotation>
    295292                        </Header>
     
    362359                        <Header>
    363360                                <Flags />
    364                                 <Position>-78.57329 AddedXmlTools2 27.16457</Position>
     361                                <Position>434.9334 756 -231.2183</Position>
    365362                                <Rotation>0 258.058838 0</Rotation>
    366363                        </Header>
     
    433430                        <Header>
    434431                                <Flags />
    435                                 <Position>-75.43486 AddedXmlTools2 -274.106232</Position>
     432                                <Position>333.634979 756 -382.9142</Position>
    436433                                <Rotation>0 170.885239 0</Rotation>
    437434                        </Header>
     
    504501                        <Header>
    505502                                <Flags />
    506                                 <Position>55.16015 AddedXmlTools2 -301.082275</Position>
     503                                <Position>8.047889 756 -313.968872</Position>
    507504                                <Rotation>0 111.10257 0</Rotation>
    508505                        </Header>
     
    575572                        <Header>
    576573                                <Flags />
    577                                 <Position>378.3339 AddedXmlTools2 -325.430664</Position>
     574                                <Position>25.6273518 756 -279.1674</Position>
    578575                                <Rotation>0 119.283485 0</Rotation>
    579576                        </Header>
     
    646643                        <Header>
    647644                                <Flags />
    648                                 <Position>431.155426 AddedXmlTools2 -183.092636</Position>
     645                                <Position>228.093643 756 20.9510841</Position>
    649646                                <Rotation>0 179.743469 0</Rotation>
    650647                        </Header>
     
    717714                        <Header>
    718715                                <Flags />
    719                                 <Position>427.98584 AddedXmlTools2 -165.537491</Position>
     716                                <Position>228.657486 756 -0.173419476</Position>
    720717                                <Rotation>0 179.743469 0</Rotation>
    721718                        </Header>
     
    788785                        <Header>
    789786                                <Flags />
    790                                 <Position>31.0909023 AddedXmlTools2 -150.9447</Position>
     787                                <Position>227.516739 756 20.885685</Position>
    791788                                <Rotation>0 179.743469 0</Rotation>
    792789                        </Header>
     
    859856                        <Header>
    860857                                <Flags />
    861                                 <Position>-12.8269024 AddedXmlTools2 87.7636261</Position>
     858                                <Position>449.521118 756 30.6618958</Position>
    862859                                <Rotation>0 135.04158 0</Rotation>
    863860                        </Header>
     
    930927                        <Header>
    931928                                <Flags />
    932                                 <Position>303.549622 AddedXmlTools2 -71.6753</Position>
     929                                <Position>-59.8743019 756 -399.768982</Position>
    933930                                <Rotation>0 0.439508975 0</Rotation>
    934931                        </Header>
     
    1001998                        <Header>
    1002999                                <Flags />
    1003                                 <Position>305.288574 AddedXmlTools2 17.1488037</Position>
     1000                                <Position>-34.60334 756 93.25939</Position>
    10041001                                <Rotation>0 95.61807 0</Rotation>
    10051002                        </Header>
     
    10721069                        <Header>
    10731070                                <Flags />
    1074                                 <Position>183.626175 AddedXmlTools2 46.94594</Position>
     1071                                <Position>-6.362502 756 79.95713</Position>
    10751072                                <Rotation>0 95.61807 0</Rotation>
    10761073                        </Header>
     
    11431140                        <Header>
    11441141                                <Flags />
    1145                                 <Position>299.9704 AddedXmlTools2 -62.2183456</Position>
     1142                                <Position>64.0541 681 148.629745</Position>
    11461143                                <Rotation>296.6574 302.560883 59.89215</Rotation>
    11471144                        </Header>
     
    12141211                        <Header>
    12151212                                <Flags>Locked</Flags>
    1216                                 <Position>419.398376 AddedXmlTools2 -295.7882</Position>
     1213                                <Position>22.003334 756 132.236313</Position>
    12171214                                <Rotation>0 322.9601 0</Rotation>
    12181215                        </Header>
     
    12851282                        <Header>
    12861283                                <Flags />
    1287                                 <Position>102.56255 AddedXmlTools2 -308.030457</Position>
     1284                                <Position>278.8632 681 -387.586151</Position>
    12881285                                <Rotation>0 349.627716 0</Rotation>
    12891286                        </Header>
     
    13561353                        <Header>
    13571354                                <Flags />
    1358                                 <Position>64.61314 AddedXmlTools2 -323.546844</Position>
     1355                                <Position>181.788742 681 -393.361542</Position>
    13591356                                <Rotation>0 349.627716 0</Rotation>
    13601357                        </Header>
     
    14271424                        <Header>
    14281425                                <Flags />
    1429                                 <Position>296.244873 AddedXmlTools2 -393.317719</Position>
     1426                                <Position>-4.895431 681 -389.6944</Position>
    14301427                                <Rotation>0 10.2411852 0</Rotation>
    14311428                        </Header>
     
    14981495                        <Header>
    14991496                                <Flags />
    1500                                 <Position>166.285965 AddedXmlTools2 -392.7305</Position>
     1497                                <Position>332.7929 606 179.083817</Position>
    15011498                                <Rotation>0 157.0583 0</Rotation>
    15021499                        </Header>
     
    15691566                        <Header>
    15701567                                <Flags />
    1571                                 <Position>40.4407272 AddedXmlTools2 135.503754</Position>
     1568                                <Position>335.643677 681 125.508224</Position>
    15721569                                <Rotation>0 52.3811646 0</Rotation>
    15731570                        </Header>
     
    16401637                        <Header>
    16411638                                <Flags />
    1642                                 <Position>-3.1352882 AddedXmlTools2 -21.6896744</Position>
     1639                                <Position>-5.66062737 606 95.64748</Position>
    16431640                                <Rotation>0 272.65802 0</Rotation>
    16441641                        </Header>
     
    17111708                        <Header>
    17121709                                <Flags />
    1713                                 <Position>400.746246 AddedXmlTools2 -115.9501</Position>
     1710                                <Position>44.2138252 531 10.4688931</Position>
    17141711                                <Rotation>0 66.02647 0</Rotation>
    17151712                        </Header>
     
    17821779                        <Header>
    17831780                                <Flags />
    1784                                 <Position>338.9443 AddedXmlTools2 -203.975388</Position>
     1781                                <Position>-25.2910767 531 70.29497</Position>
    17851782                                <Rotation>0 66.02647 0</Rotation>
    17861783                        </Header>
     
    18531850                        <Header>
    18541851                                <Flags />
    1855                                 <Position>330.339661 AddedXmlTools2 -187.970078</Position>
     1852                                <Position>-21.0974369 531 50.1971245</Position>
    18561853                                <Rotation>0 66.02647 0</Rotation>
    18571854                        </Header>
     
    19241921                        <Header>
    19251922                                <Flags />
    1926                                 <Position>311.131744 AddedXmlTools2 -207.267319</Position>
     1923                                <Position>27.2380466 531 -411.10495</Position>
    19271924                                <Rotation>0 253.804382 0</Rotation>
    19281925                        </Header>
     
    19951992                        <Header>
    19961993                                <Flags />
    1997                                 <Position>346.280853 AddedXmlTools2 -331.994019</Position>
     1994                                <Position>151.94664 531 116.959618</Position>
    19981995                                <Rotation>0 235.230042 0</Rotation>
    19991996                        </Header>
     
    20662063                        <Header>
    20672064                                <Flags />
    2068                                 <Position>46.78467 AddedXmlTools2 -374.001831</Position>
     2065                                <Position>459.213684 531 0.507997155</Position>
    20692066                                <Rotation>0 235.901474 0</Rotation>
    20702067                        </Header>
     
    21372134                        <Header>
    21382135                                <Flags />
    2139                                 <Position>305.4295 AddedXmlTools2 -382.098938</Position>
     2136                                <Position>229.851837 531 23.1037388</Position>
    21402137                                <Rotation>0 0 0</Rotation>
    21412138                        </Header>
     
    22082205                        <Header>
    22092206                                <Flags />
    2210                                 <Position>7.93541956 AddedXmlTools2 -96.3787</Position>
     2207                                <Position>292.693085 606 133.571228</Position>
    22112208                                <Rotation>0 182.014313 0</Rotation>
    22122209                        </Header>
     
    22792276                        <Header>
    22802277                                <Flags />
    2281                                 <Position>451.812225 AddedXmlTools2 -26.66731</Position>
     2278                                <Position>163.6997 606 141.527542</Position>
    22822279                                <Rotation>0 161.312744 0</Rotation>
    22832280                        </Header>
     
    23502347                        <Header>
    23512348                                <Flags />
    2352                                 <Position>3.890735 AddedXmlTools2 -154.496735</Position>
     2349                                <Position>183.227264 -90 -194.548813</Position>
    23532350                                <Rotation>0 356.43103 0</Rotation>
    23542351                        </Header>
     
    24212418                        <Header>
    24222419                                <Flags>Locked</Flags>
    2423                                 <Position>63.1485329 AddedXmlTools2 -317.548126</Position>
     2420                                <Position>110.12101 606 -436.5925</Position>
    24242421                                <Rotation>278.0008 315.1506 4.1193033E-07</Rotation>
    24252422                        </Header>
     
    24922489                        <Header>
    24932490                                <Flags />
    2494                                 <Position>37.2282314 AddedXmlTools2 45.8681259</Position>
     2491                                <Position>91.68629 681 4.790379</Position>
    24952492                                <Rotation>0 172.225037 0</Rotation>
    24962493                        </Header>
     
    25632560                        <Header>
    25642561                                <Flags />
    2565                                 <Position>15.6102247 AddedXmlTools2 -56.1515961</Position>
     2562                                <Position>338.480164 456 -121.213142</Position>
    25662563                                <Rotation>180.00032 198.85257 179.999084</Rotation>
    25672564                        </Header>
     
    26342631                        <Header>
    26352632                                <Flags />
    2636                                 <Position>350.422058 AddedXmlTools2 -323.086151</Position>
     2633                                <Position>372.101746 456 40.79812</Position>
    26372634                                <Rotation>0 179.6179 0</Rotation>
    26382635                        </Header>
     
    27052702                        <Header>
    27062703                                <Flags />
    2707                                 <Position>373.392242 AddedXmlTools2 -287.778778</Position>
     2704                                <Position>354.566376 456 42.4008026</Position>
    27082705                                <Rotation>197 0.382103026 180.000015</Rotation>
    27092706                        </Header>
     
    27762773                        <Header>
    27772774                                <Flags />
    2778                                 <Position>482.978058 AddedXmlTools2 -423.8415</Position>
     2775                                <Position>447.2767 456 -137.319855</Position>
    27792776                                <Rotation>0 280.089661 0</Rotation>
    27802777                        </Header>
     
    28472844                        <Header>
    28482845                                <Flags />
    2849                                 <Position>8.43173432 AddedXmlTools2 -181.413681</Position>
     2846                                <Position>126.507782 420 40.5357132</Position>
    28502847                                <Rotation>0 86.98753 0</Rotation>
    28512848                        </Header>
     
    29182915                        <Header>
    29192916                                <Flags />
    2920                                 <Position>12.7673929 AddedXmlTools2 -72.41088</Position>
     2917                                <Position>127.074745 420 27.4937611</Position>
    29212918                                <Rotation>0 86.98753 0</Rotation>
    29222919                        </Header>
     
    29892986                        <Header>
    29902987                                <Flags />
    2991                                 <Position>493.345673 AddedXmlTools2 -110.908844</Position>
     2988                                <Position>-2.811713 420 -430.663269</Position>
    29922989                                <Rotation>0 42.64707 0</Rotation>
    29932990                        </Header>
     
    30603057                        <Header>
    30613058                                <Flags>Locked</Flags>
    3062                                 <Position>313.6454 AddedXmlTools2 -120.866913</Position>
     3059                                <Position>57.87403 420 -182.203781</Position>
    30633060                                <Rotation>0 89.64752 0</Rotation>
    30643061                        </Header>
     
    31313128                        <Header>
    31323129                                <Flags />
    3133                                 <Position>411.392456 AddedXmlTools2 -212.415573</Position>
     3130                                <Position>401.392456 396 -222.415573</Position>
    31343131                                <Rotation>0 40.3041229 0</Rotation>
    31353132                        </Header>
     
    32023199                        <Header>
    32033200                                <Flags />
    3204                                 <Position>67.87403 AddedXmlTools2 -172.203781</Position>
     3201                                <Position>303.6454 396 -130.866913</Position>
    32053202                                <Rotation>0 174.575058 0</Rotation>
    32063203                        </Header>
     
    32733270                        <Header>
    32743271                                <Flags />
    3275                                 <Position>7.188287 AddedXmlTools2 -420.663269</Position>
     3272                                <Position>483.345673 396 -120.908844</Position>
    32763273                                <Rotation>0 355.304 0</Rotation>
    32773274                        </Header>
     
    33443341                        <Header>
    33453342                                <Flags />
    3346                                 <Position>137.074745 AddedXmlTools2 37.4937611</Position>
     3343                                <Position>2.76739287 360 -82.41088</Position>
    33473344                                <Rotation>0 203.00119 0</Rotation>
    33483345                        </Header>
     
    34153412                        <Header>
    34163413                                <Flags />
    3417                                 <Position>136.507782 AddedXmlTools2 50.5357132</Position>
     3414                                <Position>-1.56826568 360 -191.413681</Position>
    34183415                                <Rotation>0 342.3229 0</Rotation>
    34193416                        </Header>
     
    34863483                        <Header>
    34873484                                <Flags />
    3488                                 <Position>457.2767 AddedXmlTools2 -127.319855</Position>
     3485                                <Position>472.978058 336 -433.8415</Position>
    34893486                                <Rotation>0 306.1824 0</Rotation>
    34903487                        </Header>
     
    35573554                        <Header>
    35583555                                <Flags />
    3559                                 <Position>364.566376 AddedXmlTools2 52.4008026</Position>
     3556                                <Position>363.392242 336 -297.778778</Position>
    35603557                                <Rotation>0 121.313988 0</Rotation>
    35613558                        </Header>
     
    36283625                        <Header>
    36293626                                <Flags />
    3630                                 <Position>382.101746 AddedXmlTools2 50.79812</Position>
     3627                                <Position>340.422058 336 -333.086151</Position>
    36313628                                <Rotation>0 136.533173 0</Rotation>
    36323629                        </Header>
     
    36993696                        <Header>
    37003697                                <Flags />
    3701                                 <Position>348.480164 AddedXmlTools2 -111.213142</Position>
     3698                                <Position>5.61022472 300 -66.1515961</Position>
    37023699                                <Rotation>0 2.13530827 0</Rotation>
    37033700                        </Header>
     
    37703767                        <Header>
    37713768                                <Flags />
    3772                                 <Position>101.68629 AddedXmlTools2 14.790379</Position>
     3769                                <Position>27.2282314 300 35.8681259</Position>
    37733770                                <Rotation>0 2.13530827 0</Rotation>
    37743771                        </Header>
     
    38413838                        <Header>
    38423839                                <Flags />
    3843                                 <Position>120.12101 AddedXmlTools2 -426.5925</Position>
     3840                                <Position>53.1485329 300 -327.548126</Position>
    38443841                                <Rotation>0 62.22974 0</Rotation>
    38453842                        </Header>
     
    39123909                        <Header>
    39133910                                <Flags>Locked</Flags>
    3914                                 <Position>193.227264 AddedXmlTools2 -184.548813</Position>
     3911                                <Position>-6.109265 300 -164.496735</Position>
    39153912                                <Rotation>0 172.236191 0</Rotation>
    39163913                        </Header>
     
    39833980                        <Header>
    39843981                                <Flags />
    3985                                 <Position>173.6997 AddedXmlTools2 151.527542</Position>
     3982                                <Position>441.812225 276 -36.66731</Position>
    39863983                                <Rotation>0 117.178528 0</Rotation>
    39873984                        </Header>
     
    40544051                        <Header>
    40554052                                <Flags />
    4056                                 <Position>302.693085 AddedXmlTools2 143.571228</Position>
     4053                                <Position>-2.06458044 240 -106.3787</Position>
    40574054                                <Rotation>0 298.2401 0</Rotation>
    40584055                        </Header>
     
    41254122                        <Header>
    41264123                                <Flags>Locked</Flags>
    4127                                 <Position>239.851837 AddedXmlTools2 33.1037388</Position>
     4124                                <Position>295.4295 240 -392.098938</Position>
    41284125                                <Rotation>0 322.411774 0</Rotation>
    41294126                        </Header>
     
    41964193                        <Header>
    41974194                                <Flags />
    4198                                 <Position>469.213684 AddedXmlTools2 10.5079972</Position>
     4195                                <Position>36.78467 240 -384.001831</Position>
    41994196                                <Rotation>0 33.47298 0</Rotation>
    42004197                        </Header>
     
    42674264                        <Header>
    42684265                                <Flags />
    4269                                 <Position>161.94664 AddedXmlTools2 126.959618</Position>
     4266                                <Position>336.280853 180 -341.994019</Position>
    42704267                                <Rotation>0 94.67434 0</Rotation>
    42714268                        </Header>
     
    43384335                        <Header>
    43394336                                <Flags />
    4340                                 <Position>37.2380466 AddedXmlTools2 -401.10495</Position>
     4337                                <Position>301.131744 180 -217.267319</Position>
    43414338                                <Rotation>0 247.718018 0</Rotation>
    43424339                        </Header>
     
    44094406                        <Header>
    44104407                                <Flags />
    4411                                 <Position>-11.0974369 AddedXmlTools2 60.1971245</Position>
     4408                                <Position>320.339661 180 -197.970078</Position>
    44124409                                <Rotation>0 247.718018 0</Rotation>
    44134410                        </Header>
     
    44804477                        <Header>
    44814478                                <Flags />
    4482                                 <Position>-15.2910767 AddedXmlTools2 80.29497</Position>
     4479                                <Position>328.9443 180 -213.975388</Position>
    44834480                                <Rotation>0 247.718018 0</Rotation>
    44844481                        </Header>
     
    45514548                        <Header>
    45524549                                <Flags />
    4553                                 <Position>54.2138252 AddedXmlTools2 20.4688931</Position>
     4550                                <Position>390.746246 180 -125.9501</Position>
    45544551                                <Rotation>0 280.0558 0</Rotation>
    45554552                        </Header>
     
    46224619                        <Header>
    46234620                                <Flags />
    4624                                 <Position>4.33937263 AddedXmlTools2 105.64748</Position>
     4621                                <Position>-13.1352882 120 -31.6896744</Position>
    46254622                                <Rotation>0 106.310493 0</Rotation>
    46264623                        </Header>
     
    46934690                        <Header>
    46944691                                <Flags>Locked</Flags>
    4695                                 <Position>345.643677 AddedXmlTools2 135.508224</Position>
     4692                                <Position>30.4407272 0 125.503754</Position>
    46964693                                <Rotation>0 123.543991 0</Rotation>
    46974694                        </Header>
     
    47644761                        <Header>
    47654762                                <Flags />
    4766                                 <Position>342.7929 AddedXmlTools2 189.083817</Position>
     4763                                <Position>156.285965 606 -402.7305</Position>
    47674764                                <Rotation>0 14.4776783 0</Rotation>
    47684765                        </Header>
     
    48354832                        <Header>
    48364833                                <Flags />
    4837                                 <Position>5.104569 AddedXmlTools2 -379.6944</Position>
     4834                                <Position>286.244873 606 -403.317719</Position>
    48384835                                <Rotation>0 356.796539 0</Rotation>
    48394836                        </Header>
     
    49064903                        <Header>
    49074904                                <Flags />
    4908                                 <Position>191.788742 AddedXmlTools2 -383.361542</Position>
     4905                                <Position>54.61314 0 -333.546844</Position>
    49094906                                <Rotation>0 136.972717 0</Rotation>
    49104907                        </Header>
     
    49774974                        <Header>
    49784975                                <Flags />
    4979                                 <Position>288.8632 AddedXmlTools2 -377.586151</Position>
     4976                                <Position>92.56255 0 -318.030457</Position>
    49804977                                <Rotation>0 136.972717 0</Rotation>
    49814978                        </Header>
     
    50485045                        <Header>
    50495046                                <Flags />
    5050                                 <Position>32.003334 AddedXmlTools2 142.236313</Position>
     5047                                <Position>409.398376 0 -305.7882</Position>
    50515048                                <Rotation>0 292.074158 0</Rotation>
    50525049                        </Header>
     
    51195116                        <Header>
    51205117                                <Flags />
    5121                                 <Position>74.0541 AddedXmlTools2 158.629745</Position>
     5118                                <Position>289.9704 0 -72.2183456</Position>
    51225119                                <Rotation>0 205.571991 0</Rotation>
    51235120                        </Header>
     
    51905187                        <Header>
    51915188                                <Flags />
    5192                                 <Position>3.637498 AddedXmlTools2 89.95713</Position>
     5189                                <Position>173.626175 0 36.94594</Position>
    51935190                                <Rotation>0 134.847549 0</Rotation>
    51945191                        </Header>
     
    52615258                        <Header>
    52625259                                <Flags />
    5263                                 <Position>-24.60334 AddedXmlTools2 103.25939</Position>
     5260                                <Position>295.288574 60 7.14880371</Position>
    52645261                                <Rotation>0 296.4375 0</Rotation>
    52655262                        </Header>
     
    53325329                        <Header>
    53335330                                <Flags />
    5334                                 <Position>-49.8743019 AddedXmlTools2 -389.768982</Position>
     5331                                <Position>293.549622 60 -81.6753</Position>
    53355332                                <Rotation>0 329.672516 0</Rotation>
    53365333                        </Header>
     
    54035400                        <Header>
    54045401                                <Flags />
    5405                                 <Position>459.521118 AddedXmlTools2 40.6618958</Position>
     5402                                <Position>-22.8269024 60 77.7636261</Position>
    54065403                                <Rotation>0 82.24976 0</Rotation>
    54075404                        </Header>
     
    54745471                        <Header>
    54755472                                <Flags />
    5476                                 <Position>237.516739 AddedXmlTools2 30.885685</Position>
     5473                                <Position>21.0909023 60 -160.9447</Position>
    54775474                                <Rotation>0 97.27289 0</Rotation>
    54785475                        </Header>
     
    55455542                        <Header>
    55465543                                <Flags />
    5547                                 <Position>238.657486 AddedXmlTools2 9.82658052</Position>
     5544                                <Position>417.98584 60 -175.537491</Position>
    55485545                                <Rotation>0 270.697144 0</Rotation>
    55495546                        </Header>
     
    56165613                        <Header>
    56175614                                <Flags />
    5618                                 <Position>238.093643 AddedXmlTools2 30.9510841</Position>
     5615                                <Position>421.155426 60 -193.092636</Position>
    56195616                                <Rotation>0 270.697144 0</Rotation>
    56205617                        </Header>
     
    56875684                        <Header>
    56885685                                <Flags />
    5689                                 <Position>35.6273518 AddedXmlTools2 -269.1674</Position>
     5686                                <Position>368.3339 120 -335.430664</Position>
    56905687                                <Rotation>0 358.768 0</Rotation>
    56915688                        </Header>
     
    57585755                        <Header>
    57595756                                <Flags />
    5760                                 <Position>18.047889 AddedXmlTools2 -303.968872</Position>
     5757                                <Position>45.16015 120 -311.082275</Position>
    57615758                                <Rotation>0 109.107155 0</Rotation>
    57625759                        </Header>
     
    58295826                        <Header>
    58305827                                <Flags />
    5831                                 <Position>343.634979 AddedXmlTools2 -372.9142</Position>
     5828                                <Position>-85.43486 120 -284.106232</Position>
    58325829                                <Rotation>0 40.6208 0</Rotation>
    58335830                        </Header>
     
    59005897                        <Header>
    59015898                                <Flags />
    5902                                 <Position>444.9334 AddedXmlTools2 -221.2183</Position>
     5899                                <Position>-88.57329 120 17.16457</Position>
    59035900                                <Rotation>0 139.545563 0</Rotation>
    59045901                        </Header>
     
    59715968                        <Header>
    59725969                                <Flags />
    5973                                 <Position>206.638962 AddedXmlTools2 0.913823</Position>
     5970                                <Position>-79.8346939 0 70.71216</Position>
    59745971                                <Rotation>0 117.839882 0</Rotation>
    59755972                        </Header>
     
    60426039                        <Header>
    60436040                                <Flags />
    6044                                 <Position>142.760071 AddedXmlTools2 257.212509</Position>
     6041                                <Position>51.4552727 681 -283.230347</Position>
    60456042                                <Rotation>0 6.233613 0</Rotation>
    60466043                        </Header>
     
    61136110                        <Header>
    61146111                                <Flags />
    6115                                 <Position>-27.3426628 AddedXmlTools2 -481.6369</Position>
     6112                                <Position>316.930817 606 -234.495468</Position>
    61166113                                <Rotation>0 167.711685 0</Rotation>
    61176114                        </Header>
     
    61846181                        <Header>
    61856182                                <Flags />
    6186                                 <Position>511.63855 AddedXmlTools2 233.189484</Position>
     6183                                <Position>231.037384 120 -150.612183</Position>
    61876184                                <Rotation>0 45.8513031 0</Rotation>
    61886185                        </Header>
     
    62556252                        <Header>
    62566253                                <Flags>Locked</Flags>
    6257                                 <Position>-27.3426628 AddedXmlTools2 -481.6369</Position>
     6254                                <Position>195.1952 120 27.781311</Position>
    62586255                                <Rotation>0 291.8223 0</Rotation>
    62596256                        </Header>
     
    63266323                        <Header>
    63276324                                <Flags />
    6328                                 <Position>511.63855 AddedXmlTools2 233.189484</Position>
     6325                                <Position>385.682281 180 151.52861</Position>
    63296326                                <Rotation>0 209.2818 0</Rotation>
    63306327                        </Header>
     
    63976394                        <Header>
    63986395                                <Flags />
    6399                                 <Position>237.145248 AddedXmlTools2 -393.65567</Position>
     6396                                <Position>-7.76479864 537 -38.0006142</Position>
    64006397                                <Rotation>0 161.7817 0</Rotation>
    64016398                        </Header>
     
    64046401                                <Class>CopfemA2</Class>
    64056402                                <Name>mbo_femcop</Name>
    6406                                 <Weapon>MyAwesomeOniWeapon</Weapon>
     6403                                <Weapon>w1_tap</Weapon>
    64076404                                <Scripts>
    64086405                                        <Spawn />
  • XmlTools2/trunk/main.cpp

    r906 r920  
    1212    parser.setApplicationDescription("Additional documentation can be found at: http://wiki.oni2.net/XmlTools");
    1313
     14    XmlTools *myXmlTools;
    1415    QString filesWildCard, patchFilesWildCard, forceTargetFilesWildcard;
    1516    QString currentVal, newVal, diffOldNewVal, positions;
     17    QString xPathExpression;
    1618    XmlFilter filters; // Filters
     19
    1720    bool noBackups=false;
    18 
    1921
    2022    QCommandLineOption addValuesOption(QStringList() << "a" << "add-values", "Add values to a set of XML elements.");
     
    2628
    2729    QCommandLineOption currentValOption(QStringList() << "c" << "current-val", "Current value(s) [use space as separator].","current-val");
    28     QCommandLineOption newValOption(QStringList() << "n" << "new-val", "New value(s) [use space as separator]","new-val.");
     30    QCommandLineOption newValOption(QStringList() << "n" << "new-val", "New value(s) [use space as separator].","new-val");
    2931    QCommandLineOption diffOldNewValueOption(QStringList() << "d" << "diff-old-new-val", "Difference between old and new value.","diff-old-new-val");
    3032    QCommandLineOption positionsValueOption(QStringList() << "positions", "Positions [use space as separator] [0-index based].","positions");
     
    3739    QCommandLineOption attributeNameOption("attribute-name", "Attribute name of <element-name>  [used as filter].", "attribute-name");
    3840    QCommandLineOption attributeValueOption("attribute-value", "Attribute value of <attribute-name>  [used as filter].", "attribute-value");
     41    QCommandLineOption xPathExpressionOption(QStringList() << "x" << "xpath-expression", "XPath 1.0 expression to select elements where processing will occur.", "xpath-expression");
    3942    QCommandLineOption noBackupsOption(QStringList()  << "no-backups", "No backups [faster processing].");
    4043
     
    5861    parser.addOption(attributeNameOption);
    5962    parser.addOption(attributeValueOption);
     63    parser.addOption(xPathExpressionOption);
    6064    parser.addOption(noBackupsOption);
    6165
     
    7175    }
    7276
    73     // Check if the user doesn't want backups (it boost XmlTools peformance, lower disk output)
     77    // Check if the user doesn't want backups (it boosts XmlTools peformance, lower disk output)
    7478    if(parser.isSet(noBackupsOption)){
    7579        noBackups=true;
     
    9498    }
    9599
     100    if(!parser.isSet(elementNameOption) && !parser.isSet(xPathExpressionOption)){
     101        UtilXmlTools::displayErrorMessage("Parameter Parsing","element-name option or xpath-expression option is required if not using patch-files option.");
     102    }
     103    else if(parser.isSet(elementNameOption) && parser.isSet(xPathExpressionOption)){
     104        UtilXmlTools::displayErrorMessage("Parameter Parsing","element-name option and xpath-expression options cannot be used simultaneously.");
     105    }
     106
    96107    // Get element name if available
    97108    if(parser.isSet(elementNameOption)){
     
    99110    }
    100111
    101     if(filters.getElementName()==""){
    102         UtilXmlTools::displayErrorMessage("Parameter Parsing","element-name option is required if not using patch-files option.");
     112    // Get xpath expression if available
     113    if(parser.isSet(xPathExpressionOption)){
     114        xPathExpression=parser.value(xPathExpressionOption);
    103115    }
    104116
     
    155167    }
    156168
    157     XmlTools myXmlTools(filesWildCard,filters,noBackups);
     169    if(parser.isSet(elementNameOption)){
     170        myXmlTools=new XmlTools(filesWildCard,filters,noBackups);
     171    }
     172    else{
     173        myXmlTools=new XmlTools(filesWildCard,xPathExpression,noBackups);
     174    }
    158175
    159176
     
    165182        }
    166183
    167         myXmlTools.addValues(newVal);
     184        myXmlTools->addValues(newVal);
    168185    }
    169186    else if(parser.isSet(removeValuesOption)){ // Or remove-values option?
     
    173190        }
    174191
    175         myXmlTools.removeValues(currentVal);
     192        myXmlTools->removeValues(currentVal);
    176193    }
    177194    else if(parser.isSet(replaceValueOption)){ // Or replace-value option?
     
    181198        }
    182199
    183         myXmlTools.replaceValue(currentVal,newVal);
     200        myXmlTools->replaceValue(currentVal,newVal);
    184201    }
    185202    else if(parser.isSet(replaceAllValuesOption)){ // Or replace-all-values option?
     
    190207        }
    191208
    192         myXmlTools.replaceAll(newVal,positions);
     209        myXmlTools->replaceAll(newVal,positions);
    193210    }
    194211    else if(parser.isSet(updateElementsOption)){ // Or update-elements option?
     
    199216        }
    200217
    201         myXmlTools.updateElements(diffOldNewVal);
     218        myXmlTools->updateElements(diffOldNewVal);
    202219    }
    203220    else if(parser.isSet(invertElementsOption)){ // Or invert-elements option?
    204         myXmlTools.invertElements();
     221        myXmlTools->invertElements();
    205222    }
    206223    else{
     
    209226    }
    210227
     228    //delete myXmlTools;
    211229    //std::cout << "Started" << std::endl;
    212230
  • XmlTools2/trunk/readme.txt

    r906 r920  
    3535
    3636-Remove XML from existing files (patch only).
     37
     38-Select elements using element name, parent element name, attribute name/value and XPath 1.0.
    3739
    3840-Powerful custom XML editing using javascript (for what you can't do with native operations) (patch only).
     
    7577REMOVE -> REMOVE_NODE
    7678CUSTOMCODE -> CUSTOM_CODE
     79-Added option to select xml elements by attribute name and value
     80-Added option to select xml elements by XPath 1.0 (should reduce the need of javascript)
  • XmlTools2/trunk/util.cpp

    r906 r920  
    33namespace GlobalVars{
    44QString AppName="XmlTools";
     5#ifdef Q_OS_WIN
     6QString AppExecutable=AppName+".exe";
     7#else
     8QString AppExecutable="./"+AppName; // Mac OS needs unix like executing
     9#endif
    510QString AppVersion="2.0";
    611}
  • XmlTools2/trunk/util.h

    r906 r920  
    1010namespace GlobalVars{
    1111extern QString AppName;
     12extern QString AppExecutable;
    1213extern QString AppVersion;
    1314}
  • XmlTools2/trunk/utilxmltools.cpp

    r906 r920  
    5555}
    5656
     57void getAllXpathElements(const QString &xPathExpression, pugi::xml_document &doc, QList<pugi::xml_node> &result){
     58
     59    pugi::xpath_node_set selectedNodes;
     60    pugi::xpath_node node;
     61
     62    try
     63    {
     64        selectedNodes = doc.select_nodes(xPathExpression.toLatin1().constData());
     65    }
     66
     67    catch (const pugi::xpath_exception& e)
     68    {
     69        displayErrorMessage("XPath element selection","Selection of elements using the XPathExpression: '" + xPathExpression + "' failed:\n" + e.what());
     70    }
     71
     72    for (pugi::xpath_node_set::const_iterator currNode = selectedNodes.begin(); currNode != selectedNodes.end(); ++currNode)
     73    {
     74        node = *currNode;
     75        if(node){ // if node != null
     76            result << node.node();
     77        }
     78    }
     79
     80    if(result.isEmpty()){
     81        result << pugi::xml_node(); // add an empty node if none found
     82    }
     83
     84}
     85
     86pugi::xml_node getFirstXpathElement(const QString &xPathExpression, pugi::xml_document &doc){
     87    pugi::xpath_node selectedNode;
     88
     89    try
     90    {
     91        selectedNode = doc.select_single_node(xPathExpression.toLatin1().constData());
     92    }
     93
     94    catch (const pugi::xpath_exception& e)
     95    {
     96        displayErrorMessage("XPath element selection","Selection of element using the XPathExpression: '" + xPathExpression + "' failed:\n" + e.what());
     97    }
     98
     99    return selectedNode.node();
     100}
     101
    57102void getAllNamedElements(pugi::xml_node &node, QList<pugi::xml_node> &result, XmlFilter &filters){
    58103    for (pugi::xml_node_iterator currNode = node.begin(); currNode != node.end(); ++currNode)
     
    70115}
    71116
    72 pugi::xml_node getFirstNamedElements(pugi::xml_node &node, XmlFilter &filters){
     117pugi::xml_node getFirstNamedElement(pugi::xml_node &node, XmlFilter &filters){
    73118
    74119    pugi::xml_node foundNode;
     
    82127        }
    83128
    84         foundNode=getFirstNamedElements(*currNode,filters);
     129        foundNode=getFirstNamedElement(*currNode,filters);
    85130
    86131        if(foundNode.type()!=pugi::node_null){
  • XmlTools2/trunk/utilxmltools.h

    r906 r920  
    1414void backupFile(const QString &file);
    1515void getAllNamedElements(pugi::xml_node &node, QList<pugi::xml_node> &result, XmlFilter &filters);
     16void getAllXpathElements(const QString &xPathExpression, pugi::xml_document &doc, QList<pugi::xml_node> &result);
    1617void displaySuccessMessage(const int numberOperations, const QString &operation);
    1718void displayErrorMessage(const QString& operation, const QString &message, bool exitProgram=true);
    18 pugi::xml_node getFirstNamedElements(pugi::xml_node &node, XmlFilter &filters);
     19pugi::xml_node getFirstNamedElement(pugi::xml_node &node, XmlFilter &filters);
     20pugi::xml_node getFirstXpathElement(const QString &xPathExpression, pugi::xml_document &doc);
    1921
    2022//// inline functions
  • XmlTools2/trunk/xmlfilter.cpp

    r906 r920  
    4646    this->attributeValue=attributeValue;
    4747}
     48
     49// Clears filter
     50void XmlFilter::clear(){
     51    this->elementName.clear();
     52    this->parentElementName.clear();
     53    this->attributeName.clear();
     54    this->attributeValue.clear();
     55}
  • XmlTools2/trunk/xmlfilter.h

    r906 r920  
    2121    void setAttributeName(QString attributeName);
    2222    void setAttributeValue(QString attributeValue);
     23
     24    void clear();
    2325private:
    2426    QString elementName;
  • XmlTools2/trunk/xmlpatch.cpp

    r910 r920  
    4444}
    4545
    46 void XmlPatch::addToOperation(const QString &xmlString, XmlFilter &filters, const QString &filesWildcard){
     46void XmlPatch::insertNodesOperation(const QString &xmlString, XmlFilter &filters, const QString &xPathExpression, const QString &filesWildcard){
    4747
    4848    QStringList filesToProcess;
    49     pugi::xml_node nodeToInsertion;
     49    QList<pugi::xml_node> nodesToInsertion;
    5050    pugi::xml_document newNode;
    5151    pugi::xml_parse_result result;
     
    5454
    5555    if(filesToProcess.isEmpty()){
    56         UtilXmlTools::displayErrorMessage("@ADD_INSIDE_NODE","No XML files were found for the wildcard: "+filesWildcard);
     56        UtilXmlTools::displayErrorMessage("@ADD_INSIDE_NODES","No XML files were found for the wildcard: "+filesWildcard);
    5757    }
    5858
     
    6060
    6161    if(result.status!=pugi::status_ok){
    62         UtilXmlTools::displayErrorMessage("@ADD_INSIDE_NODE", "The xml node to insert is invalid.\n" + Util::toQString(result.description()));
     62        UtilXmlTools::displayErrorMessage("@ADD_INSIDE_NODES", "The xml node to insert is invalid.\n" + Util::toQString(result.description()));
    6363    }
    6464
     
    6666    for(int i=0; i<filesToProcess.size(); i++){
    6767
    68         UtilXmlTools::loadXmlFile(filesToProcess[i],this->document,this->rootNode,this->backupsEnabled,"@ADD_INSIDE_NODE");
    69 
    70         nodeToInsertion=UtilXmlTools::getFirstNamedElements(this->rootNode,filters);
    71 
    72         if(nodeToInsertion.type()==pugi::node_null){
     68        UtilXmlTools::loadXmlFile(filesToProcess[i],this->document,this->rootNode,this->backupsEnabled,"@ADD_INSIDE_NODES");
     69
     70        // Check how the element will be fetched via element name or xpath expression
     71        if(xPathExpression.isEmpty()){
     72            UtilXmlTools::getAllNamedElements(this->rootNode,nodesToInsertion,filters);
     73        }
     74        else{
     75            UtilXmlTools::getAllXpathElements(xPathExpression,this->document,nodesToInsertion);
     76        }
     77
     78        if(nodesToInsertion[0].type()==pugi::node_null){
    7379
    7480            QString errMessage;
    7581
    76             errMessage = "It wasn't found a node with a ElementName: '" + filters.getElementName() + "'";
    77             if(filters.getParentElementName()!=""){
    78                 errMessage += " and a ParentElementName: '" + filters.getParentElementName() + "'";
    79             }
    80             if(filters.getAttributeName()!=""){
    81                 errMessage += " and an AttributeName: '" + filters.getAttributeName() + "' and an AttributeValue: '" + filters.getAttributeValue() + "'";
    82             }
    83 
    84             UtilXmlTools::displayErrorMessage("@ADD_INSIDE_NODE",errMessage);
    85         }
    86 
    87         nodeToInsertion.prepend_copy(newNode.first_child()); // append the new node
    88 
    89 
    90         UtilXmlTools::saveXmlFile(filesToProcess[i],this->document, "@ADD_INSIDE_NODE");
    91     }
    92 
    93     UtilXmlTools::displaySuccessMessage(filesToProcess.size(),"@ADD_INSIDE_NODE");
    94 }
    95 
    96 void XmlPatch::removeNodeOperation(XmlFilter &filters, const QString &filesWildcard){
     82            if(xPathExpression.isEmpty()){
     83                errMessage = "It wasn't found any node with a ElementName: '" + filters.getElementName() + "'";
     84                if(filters.getParentElementName()!=""){
     85                    errMessage += " and a ParentElementName: '" + filters.getParentElementName() + "'";
     86                }
     87                if(filters.getAttributeName()!=""){
     88                    errMessage += " and an AttributeName: '" + filters.getAttributeName() + "' and an AttributeValue: '" + filters.getAttributeValue() + "'";
     89                }
     90            }
     91            else{
     92                errMessage = "It wasn't found any node with a XPathExpression: '" + xPathExpression + "'";
     93            }
     94
     95            UtilXmlTools::displayErrorMessage("@ADD_INSIDE_NODES",errMessage);
     96        }
     97
     98        for(int j=0; j<nodesToInsertion.size(); j++){
     99            nodesToInsertion[j].prepend_copy(newNode.first_child()); // append the new node
     100        }
     101
     102
     103        UtilXmlTools::saveXmlFile(filesToProcess[i],this->document, "@ADD_INSIDE_NODES");
     104    }
     105
     106    UtilXmlTools::displaySuccessMessage(filesToProcess.size(),"@ADD_INSIDE_NODES");
     107}
     108
     109void XmlPatch::removeNodesOperation(XmlFilter &filters, const QString &xPathExpression, const QString &filesWildcard){
    97110
    98111    QStringList filesToProcess;
    99112
    100     pugi::xml_node nodeToDeletion;
     113    QList<pugi::xml_node> nodesToDeletion;
    101114
    102115    filesToProcess=UtilXmlTools::getAllXmlFilesByWildcard(filesWildcard);
    103116
    104117    if(filesToProcess.isEmpty()){
    105         UtilXmlTools::displayErrorMessage("@REMOVE_NODE","No XML files were found for the wildcard: "+filesWildcard);
     118        UtilXmlTools::displayErrorMessage("@REMOVE_NODES","No XML files were found for the wildcard: "+filesWildcard);
    106119    }
    107120
     
    109122    for(int i=0; i<filesToProcess.size(); i++){
    110123
    111         UtilXmlTools::loadXmlFile(filesToProcess[i],this->document,this->rootNode,this->backupsEnabled,"@REMOVE_NODE");
    112 
    113         nodeToDeletion=UtilXmlTools::getFirstNamedElements(this->rootNode,filters);
    114 
    115         if(nodeToDeletion.type()==pugi::node_null){
     124        UtilXmlTools::loadXmlFile(filesToProcess[i],this->document,this->rootNode,this->backupsEnabled,"@REMOVE_NODES");
     125
     126        // Check how the element will be fetched via element name or xpath expression
     127        if(xPathExpression.isEmpty()){
     128            UtilXmlTools::getAllNamedElements(this->rootNode,nodesToDeletion,filters);
     129        }
     130        else{
     131            UtilXmlTools::getAllXpathElements(xPathExpression,this->document,nodesToDeletion);
     132        }
     133
     134        if(nodesToDeletion[0].type()==pugi::node_null){
     135
    116136            QString errMessage;
    117137
    118             errMessage = "It wasn't found a node with a ElementName: '" + filters.getElementName() + "'";
    119             if(filters.getParentElementName()!=""){
    120                 errMessage += " and a ParentElementName: '" + filters.getParentElementName() + "'";
    121             }
    122             if(filters.getAttributeName()!=""){
    123                 errMessage += " and an AttributeName: '" + filters.getAttributeName() + "' and an AttributeValue: '" + filters.getAttributeValue() + "'";
    124             }
    125 
    126             UtilXmlTools::displayErrorMessage("@REMOVE_NODE",errMessage);
    127         }
    128 
    129         if(!nodeToDeletion.parent().remove_child(nodeToDeletion)){  // remove the node
    130 
    131             QString errMessage;
    132 
    133             errMessage = "Couldn't remove the node with Element '" + filters.getElementName() + "'";
    134 
    135             if(filters.getParentElementName()!=""){
    136                 errMessage += " and a ParentElement: '" + filters.getParentElementName() + "'";
    137             }
    138 
    139             UtilXmlTools::displayErrorMessage("@REMOVE_NODE",errMessage);
    140         }
    141 
    142         UtilXmlTools::saveXmlFile(filesToProcess[i],this->document, "@REMOVE_NODE");
    143     }
    144 
    145     UtilXmlTools::displaySuccessMessage(filesToProcess.size(), "@REMOVE_NODE");
     138            if(xPathExpression.isEmpty()){
     139                errMessage = "It wasn't found any node with a ElementName: '" + filters.getElementName() + "'";
     140                if(filters.getParentElementName()!=""){
     141                    errMessage += " and a ParentElementName: '" + filters.getParentElementName() + "'";
     142                }
     143                if(filters.getAttributeName()!=""){
     144                    errMessage += " and an AttributeName: '" + filters.getAttributeName() + "' and an AttributeValue: '" + filters.getAttributeValue() + "'";
     145                }
     146            }
     147            else{
     148                errMessage = "It wasn't found any node with a XPathExpression: '" + xPathExpression + "'";
     149            }
     150
     151            UtilXmlTools::displayErrorMessage("@REMOVE_NODES",errMessage);
     152        }
     153
     154        // Delete all the specified nodes
     155        for(int j=0; j<nodesToDeletion.size(); j++){
     156            if(!nodesToDeletion[j].parent().remove_child(nodesToDeletion[j])){  // remove the node
     157
     158                QString errMessage;
     159                if(xPathExpression.isEmpty()){
     160                    errMessage = "Couldn't remove the node with Element '" + filters.getElementName() + "'";
     161
     162                    if(filters.getParentElementName()!=""){
     163                        errMessage += " and a ParentElement: '" + filters.getParentElementName() + "'";
     164                    }
     165                }
     166                else{
     167                    errMessage = "Couldn't remove the node with the XPathExpression '" + xPathExpression + "'";
     168                }
     169
     170                UtilXmlTools::displayErrorMessage("@REMOVE_NODES",errMessage);
     171            }
     172        }
     173
     174        UtilXmlTools::saveXmlFile(filesToProcess[i],this->document, "@REMOVE_NODES");
     175    }
     176
     177    UtilXmlTools::displaySuccessMessage(filesToProcess.size(), "@REMOVE_NODES");
    146178}
    147179
     
    152184
    153185    // Avoid infinite fork loops
    154     if(commandString.contains("-p") || commandString.contains("--patch-files")){
     186    if(commandString.contains(" -p ") || commandString.contains(" --patch-files ")){
    155187        UtilXmlTools::displayErrorMessage("@COMMAND","Use of --patch-files option is not allowed inside a patch file");
    156188    }
    157189
    158     newXmlToolsInstance.start(GlobalVars::AppName + " " + commandString);
     190    newXmlToolsInstance.start(GlobalVars::AppExecutable + " " + commandString);
    159191    newXmlToolsInstance.waitForFinished(-1); // wait for new instance to finish
    160192
     
    166198    }
    167199
    168     std::cout << "@COMMAND patch operation output:\n" << resultOutput.toLatin1().constData() << std::endl;
     200    std::cout << "@COMMAND patch operation output:\n"
     201              << "########################################################################\n"
     202              << resultOutput.toLatin1().constData()
     203              << "########################################################################"
     204              << std::endl;
    169205
    170206    UtilXmlTools::displaySuccessMessage(1,"@COMMAND");
     
    289325    QString line, filesWildcard;
    290326    QString xmlToInsert, command, jsCode;
     327    QString xPathExpression;
    291328    XmlFilter filters;
    292329
     
    298335            continue;
    299336        }
    300         else if(line.startsWith("@ADD_INSIDE_NODE")){
     337        else if(line.startsWith("@ADD_INSIDE_NODES")){
     338            xPathExpression=getPatchParameterValue(line,"XPathExpression");
    301339            filters.setElementName(getPatchParameterValue(line,"ElementName"));
    302340            filters.setParentElementName(getPatchParameterValue(line,"ParentElementName"));
     
    311349            }
    312350
    313             // Check attribute filters
     351            // Check options
     352            if(xPathExpression.isEmpty() && filters.getElementName().isEmpty()){
     353                UtilXmlTools::displayErrorMessage("@ADD_INSIDE_NODES","ElementName option or XPathExpression option is required.");
     354            }
     355            else if(!xPathExpression.isEmpty() && !filters.getElementName().isEmpty()){
     356                UtilXmlTools::displayErrorMessage("@ADD_INSIDE_NODES","ElementName option and XPathExpression options cannot be used simultaneously.");
     357            }
    314358            if(filters.getAttributeName()!="" && filters.getAttributeValue()==""){
    315                 UtilXmlTools::displayErrorMessage("@ADD_INSIDE_NODE","attribute-value option is required if using attribute-name option.");
     359                UtilXmlTools::displayErrorMessage("@ADD_INSIDE_NODES","AttributeValue option is required if using AttributeName option.");
    316360            }
    317361
    318362            if(filters.getAttributeValue()!="" && filters.getAttributeName()==""){
    319                 UtilXmlTools::displayErrorMessage("@ADD_INSIDE_NODE","attribute-name option is required if using attribute-value option.");
     363                UtilXmlTools::displayErrorMessage("@ADD_INSIDE_NODES","AttributeName option is required if using AttributeValue option.");
    320364            }
    321365
     
    328372            }
    329373
    330             addToOperation(xmlToInsert,filters,filesWildcard);
    331 
    332         }
    333         else if(line.startsWith("@REMOVE_NODE")){
    334 
     374            insertNodesOperation(xmlToInsert,filters,xPathExpression,filesWildcard);
     375
     376            xmlToInsert.clear();
     377            filters.clear();
     378            xPathExpression.clear();
     379            filesWildcard.clear();
     380        }
     381        else if(line.startsWith("@REMOVE_NODES")){
     382
     383            xPathExpression=getPatchParameterValue(line,"XPathExpression");
    335384            filters.setElementName(getPatchParameterValue(line,"ElementName"));
    336385            filters.setParentElementName(getPatchParameterValue(line,"ParentElementName"));
     
    345394            }
    346395
    347             // Check attribute filters
     396            // Check options
     397            if(xPathExpression.isEmpty() && filters.getElementName().isEmpty()){
     398                UtilXmlTools::displayErrorMessage("@REMOVE_NODES","ElementName option or XPathExpression option is required.");
     399            }
     400            else if(!xPathExpression.isEmpty() && !filters.getElementName().isEmpty()){
     401                UtilXmlTools::displayErrorMessage("@REMOVE_NODES","ElementName option and XPathExpression options cannot be used simultaneously.");
     402            }
     403
    348404            if(filters.getAttributeName()!="" && filters.getAttributeValue()==""){
    349                 UtilXmlTools::displayErrorMessage("@REMOVE_NODE","attribute-value option is required if using attribute-name option.");
     405                UtilXmlTools::displayErrorMessage("@REMOVE_NODES","AttributeValue option is required if using AttributeName option.");
    350406            }
    351407
    352408            if(filters.getAttributeValue()!="" && filters.getAttributeName()==""){
    353                 UtilXmlTools::displayErrorMessage("@REMOVE_NODE","attribute-name option is required if using attribute-value option.");
    354             }
    355 
    356             removeNodeOperation(filters,filesWildcard);
    357 
     409                UtilXmlTools::displayErrorMessage("@REMOVE_NODES","AttributeName option is required if using AttributeValue option.");
     410            }
     411
     412            removeNodesOperation(filters,xPathExpression,filesWildcard);
     413
     414            filters.clear();
     415            xPathExpression.clear();
     416            filesWildcard.clear();
    358417        }
    359418        else if(line.startsWith("@COMMAND")){
    360419
    361             command=getPatchParameterValue(line,"");
     420            command=getPatchParameterValue(line,"Arguments");
     421
     422            command.replace("'","\""); //replace apostrophe by quotes, to avoid problems
    362423
    363424            executeCommandOperation(command);
     425
     426            command.clear();
    364427        }
    365428        else if(line.startsWith("@CUSTOM_CODE")){
     
    382445
    383446            executeCustomCommandOperation(jsCode,filesWildcard);
     447
     448            jsCode.clear();
     449            filesWildcard.clear();
    384450        }
    385451    }
     
    390456    int startValueIdx, endValueIdx;
    391457
    392     parameter+=" "; // Parameters include a space before it's value.
     458    parameter=" "+parameter+" "; // Parameters include a space before and after it's value.
    393459
    394460    if(!line.contains(parameter)){
    395         if(parameter=="ParentElementName " || parameter=="AttributeName " || parameter=="AttributeValue "){
     461        if(parameter==" ParentElementName " || parameter==" AttributeName " || parameter==" AttributeValue "
     462                || parameter==" ElementName " || parameter==" XPathExpression "){
    396463            return ""; // not mandatory
    397464        }
  • XmlTools2/trunk/xmlpatch.h

    r906 r920  
    1616    bool backupsEnabled;
    1717    QString getPatchParameterValue(const QString& line, QString parameter);
    18     void addToOperation(const QString &xmlString, XmlFilter &filters, const QString &filesWildcard="");
    19     void removeNodeOperation(XmlFilter &filters, const QString &filesWildcard="");
     18    void insertNodesOperation(const QString &xmlString, XmlFilter &filters, const QString &xPathExpression, const QString &filesWildcard="");
     19    void removeNodesOperation(XmlFilter &filters, const QString &xPathExpression, const QString &filesWildcard="");
    2020    void executeCommandOperation(const QString &commandString);
    2121    void executeCustomCommandOperation(const QString &jsString, const QString &filesWildcard="");
  • XmlTools2/trunk/xmltools.cpp

    r910 r920  
    11#include "xmltools.h"
    22
     3// Filters constructor
    34XmlTools::XmlTools(QString filesWildcard, XmlFilter filter, bool noBackups)
    45{
     
    1213}
    1314
     15// XPath constructor
     16XmlTools::XmlTools(QString filesWildcard, QString xPathExpression, bool noBackups)
     17{
     18    this->filesToProcess=UtilXmlTools::getAllXmlFilesByWildcard(filesWildcard);
     19    this->xPathExpression=xPathExpression;
     20    this->backupsEnabled=!noBackups;
     21}
     22
    1423// Adds new values to an element
    1524void XmlTools::addValues(QString newValues){
     
    2433
    2534        newValuesList=Util::qStringListFromSpacedString(newValues);
    26         UtilXmlTools::getAllNamedElements(this->rootNode,elements,this->filters);
     35
     36        // Check how the elements will be fetched via element name or xpath expression
     37        if(this->xPathExpression==""){
     38            UtilXmlTools::getAllNamedElements(this->rootNode,elements,this->filters);
     39        }
     40        else{
     41            UtilXmlTools::getAllXpathElements(this->xPathExpression,this->document,elements);
     42        }
    2743
    2844        for(int j=0; j<elements.size(); j++){
     
    5773        UtilXmlTools::loadXmlFile(this->filesToProcess[i],this->document,this->rootNode,this->backupsEnabled, "remove-values");
    5874
    59         UtilXmlTools::getAllNamedElements(this->rootNode,elements,this->filters);
     75        // Check how the elements will be fetched via element name or xpath expression
     76        if(this->xPathExpression==""){
     77            UtilXmlTools::getAllNamedElements(this->rootNode,elements,this->filters);
     78        }
     79        else{
     80            UtilXmlTools::getAllXpathElements(this->xPathExpression,this->document,elements);
     81        }
    6082
    6183        valuesToRemoveList=Util::qStringListFromSpacedString(valuesToRemove);
     
    98120        UtilXmlTools::loadXmlFile(this->filesToProcess[i],this->document,this->rootNode,this->backupsEnabled, "replace-value");
    99121
    100         UtilXmlTools::getAllNamedElements(this->rootNode,elements,this->filters);
     122        // Check how the elements will be fetched via element name or xpath expression
     123        if(this->xPathExpression==""){
     124            UtilXmlTools::getAllNamedElements(this->rootNode,elements,this->filters);
     125        }
     126        else{
     127            UtilXmlTools::getAllXpathElements(this->xPathExpression,this->document,elements);
     128        }
    101129
    102130        for(int j=0; j<elements.size(); j++){
     
    132160        UtilXmlTools::loadXmlFile(this->filesToProcess[i],this->document,this->rootNode,this->backupsEnabled, "replace-all");
    133161
    134         UtilXmlTools::getAllNamedElements(this->rootNode,elements,this->filters);
     162        // Check how the elements will be fetched via element name or xpath expression
     163        if(this->xPathExpression==""){
     164            UtilXmlTools::getAllNamedElements(this->rootNode,elements,this->filters);
     165        }
     166        else{
     167            UtilXmlTools::getAllXpathElements(this->xPathExpression,this->document,elements);
     168        }
    135169
    136170
     
    166200        UtilXmlTools::loadXmlFile(this->filesToProcess[i],this->document,this->rootNode,this->backupsEnabled, "update-elements");
    167201
    168         UtilXmlTools::getAllNamedElements(this->rootNode,elements,this->filters);
     202        // Check how the elements will be fetched via element name or xpath expression
     203        if(this->xPathExpression==""){
     204            UtilXmlTools::getAllNamedElements(this->rootNode,elements,this->filters);
     205        }
     206        else{
     207            UtilXmlTools::getAllXpathElements(this->xPathExpression,this->document,elements);
     208        }
    169209
    170210
     
    207247        QStringList invertedElements; //Inverting the element order
    208248
    209         UtilXmlTools::getAllNamedElements(this->rootNode,elements,this->filters);
     249        // Check how the elements will be fetched via element name or xpath expression
     250        if(this->xPathExpression==""){
     251            UtilXmlTools::getAllNamedElements(this->rootNode,elements,this->filters);
     252        }
     253        else{
     254            UtilXmlTools::getAllXpathElements(this->xPathExpression,this->document,elements);
     255        }
    210256
    211257        // Read all elements and save to the list
  • XmlTools2/trunk/xmltools.h

    r906 r920  
    2626public:
    2727    XmlTools(QString filesWildcard, XmlFilter filter, bool noBackups);
     28    XmlTools(QString filesWildcard, QString xPathExpression, bool noBackups);
    2829    void addValues(QString newValues);
    2930    void removeValues(QString valuesToRemove);
     
    3738    pugi::xml_node rootNode;
    3839    QStringList filesToProcess;
     40    QString xPathExpression;
    3941    XmlFilter filters;
    4042    bool backupsEnabled;
Note: See TracChangeset for help on using the changeset viewer.