0

I've XML file, consist of 37 Major folder,each major folder has number of minor folders, and each minor folder has 3 placemarks.

i wanna add this node to the first placemark at this first minor folder which in the first major folder.

i tried to do that, but some problems faced me ... first there's my node which i wanna add

top = newXMLNode("description")

table = newXMLNode("table", attrs = c(width = 300, border = 1), parent = top)
tbody <- newXMLNode("tbody",parent = table)
tr <- newXMLNode("tr",parent = tbody)
th <- newXMLNode("th",attrs = c(scope = "col"),scope1 = 5,parent = tr)
th <- newXMLNode("th",attrs = c(scope = "col"),scope1 = "MD",parent = tr)
th <- newXMLNode("th",attrs = c(scope = "col"),scope1 = "PM",parent = tr)
tr <- newXMLNode("tr",parent = tbody)

th <- newXMLNode("th",attrs = c(scope = "col"),scope1 = 5,parent = tr)
th <- newXMLNode("th",attrs = c(scope = "col"),scope1 = "MD",parent = tr)
th <- newXMLNode("th",attrs = c(scope = "col"),scope1 = "PM",parent = tr)
tr <- newXMLNode("tr",parent = tbody)
th <- newXMLNode("th",attrs = c(scope = "col"),scope1 =5,parent = tr)
th <- newXMLNode("th",attrs = c(scope = "col"),scope1 = "MD",parent = tr)
th <- newXMLNode("th",attrs = c(scope = "col"),scope1 = "PM",parent = tr)
tbody <- newXMLNode("tbody",parent = table)

th <- newXMLNode("img",attrs = c(src = URL,width = "700",height= "777",alt=""),parent =top )

here's what i tried ...

data <- xmlTreeParse("xml_data.xml")
data$doc$children$Folder[[4]][[3]][[3]]$description <- top 
saveXML(data, file ="xml_data.xml")

first problem is : when i write "data$doc$children$Folder[[4]][[3]][[3]]" in console, the description node doesn't appear in the the console and when i write "data$doc$children$Folder[[4]][[3]][[3]]$description" it appears and i don't know why this happens..

2nd problem is : when i use saveXMLto check if description is in the first place mark or not .... this error appears..

Error in (function (classes, fdef, mtable)  : 
  unable to find an inherited method for function ‘saveXML’ for signature ‘"XMLDocument"’

i searched for this and i found i should use data <- xmlTreeParse(Url,useInternalNodes = TRUE ) .... but this doesn't allow me to use data$doc$children$Folder[[4]][[3]][[3]]...

so please, is there a way to add the node to this position in the xml file ? or is there a solution for my problems ?

here's my xml file .

3
  • You appear to want to embed an HTML table into XML file. Can you advise where in XML file as you are using numbered indices and not a element name path -[[4]][[3]][[3]] is not easily seen? Commented Sep 23, 2016 at 19:10
  • i used '[[4]][[3]][[3]]' .... i use this formula because when i use $ after 'data$doc$children$Folder' i get only 3 options and there are 36 other option , so number 4 indicates to the first major folder,and [[3]] indicates to the first minor folder and [[3]] indicates for the first placemark Commented Sep 23, 2016 at 19:20
  • @Parfait, i found a way to add the html to the xml, but still stuck in problem that i can't save the xml into a file on my computer, could u please tell me if u know ? data$doc$children$Folder[[4]][[3]][[3]][["description"]] <- top Commented Sep 23, 2016 at 19:46

1 Answer 1

1

Consider using getNodeSet to find the specific element you intend to add the XML snippet, then in defining the new child make sure to reference the new element's parent to this nodeset:

data <- xmlTreeParse("xml_data.xml")
firstplacemark <- getNodeSet(data, "/Folder/Folder[1]/Folder[1]/Placemark")

top <- newXMLNode("description", parent = firstplacemark) 

#... same code as above 


saveXML(data, file="xml_data.xml")

Output

<?xml version="1.0"?>
<Folder>
  <name>All Maps</name>
  <visibility>0</visibility>
  <Folder>
    <name>Kornich ElNile</name>
     <visibility>0</visibility>
     <Folder>
       <name>Kornich ElNile;Zera3y To Arcadia</name>
       <visibility>0</visibility>
       <Placemark>
         <name>Directions from 30.10093 31.2401 to 30.07046 31.22686</name>
         <visibility>0</visibility>
         <styleUrl>#msn_ylw-pushpin0</styleUrl>
         <LineString>
           <tessellate>1</tessellate>
           <coordinates>
                31.23924,30.09923,0 31.23904,30.09886,0
                31.23859,30.09802,0 31.23836,30.09758,0 31.23813,30.09719,0 
                31.23796000000001,30.09691,0 31.23781,30.09663,0 31.23747,30.09608,0 
                31.2371,30.09546,0 31.2351,30.09159,0 31.23495,30.09131,0 
                31.23487,30.09118,0 31.2347,30.09093,0 31.23448,30.09059,0 
                31.23437,30.09043,0 31.23428,30.09029,0 31.23422,30.09021,0 
                31.23415,30.0901,0 31.23406,30.08992,0 31.23397,30.08968,0 
                31.23387,30.08943,0 31.23373,30.08903,0 31.23359,30.08863,0 
                31.2335,30.08835,0 31.23344,30.08804,0 31.23338,30.08776,0 
                31.23332,30.08751,0 31.23321,30.08723,0 31.23313,30.08706,0 
                31.23306,30.0869,0 31.23295,30.08667,0 31.23293,30.08662,0 
                31.23281,30.08629,0 31.23273,30.08606,0 31.23272,30.086,0 
                31.23266,30.08576,0 31.23259,30.08551,0 31.23245,30.08498,0 
                31.23235,30.08466,0 31.23223,30.08428,0 31.23205,30.08388,0 
                31.23181,30.08342,0 31.23176,30.08333,0 31.23143,30.08276,0 
                31.23135,30.08261,0 31.23119,30.08228,0 31.23109,30.08202,0 
                31.23096,30.08167,0 31.2309,30.08148,0 31.23084,30.08124000000001,0 
                31.2308,30.08102,0 31.23078,30.08076,0 31.23077,30.08049000000001,0 
                31.23076,30.0803,0 31.23073,30.08011,0 31.23068,30.07991,0 
                31.23064,30.07979,0 31.23055,30.07957,0 31.23032,30.07908,0 
                31.23007,30.07857,0 31.23005,30.07854,0 31.22974,30.07796,0 
                31.22963,30.07776,0 31.22945,30.07743,0 31.22907,30.07672,0 
                31.22897,30.07651,0 31.22842,30.07561,0 31.22790000000001,30.07482,0 
                31.22782,30.07468,0 31.22758,30.07423,0 31.22754000000001,30.07415,0 
                31.22754000000001,30.07414,0 31.22751,30.07409,0 31.22744,30.0739,0 
                31.22738,30.07369,0 31.22735,30.07353,0 31.22735,30.07347,0 
                31.22731,30.07324,0 31.22729,30.073,0 31.22727,30.07256,0 
                31.22724,30.07227,0 31.22712,30.07166,0 31.22703,30.07125,0 
                31.22697000000001,30.07097,0                    
           </coordinates>
        </LineString>
        <description>
          <table width="300" border="1">
            <tbody>
              <tr>
                <th scope="col">5</th>
                <th scope="col">MD</th>
                <th scope="col">PM</th>
              </tr>
              <tr>
                <th scope="col">5</th>
                <th scope="col">MD</th>
                <th scope="col">PM</th>
              </tr>
              <tr>
                <th scope="col">5</th>
                <th scope="col">MD</th>
                <th scope="col">PM</th>
              </tr>
            </tbody>
            <tbody/>
          </table>
          <img src="http://www.example.com" width="700" height="777" alt=""/>
        </description>
      </Placemark>
 ...
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.