2016-09-23 80 views
0

我有XML文件,包含37個主要文件夾,每個主要文件夾包含次要文件夾數量,每個次要文件夾包含3個地點標記。將節點插入XML文件中的某個節點使用R

我想將此節點添加到第一個主要文件夾中的第一個次要文件夾的第一個地標。

我想這樣做,但有些問題面臨我... 第一有我的節點,我想補充

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) 

這裏就是我想...

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

第一個問題是:當我在控制檯中寫入「data$doc$children$Folder[[4]][[3]][[3]]」時,說明節點不會出現在控制檯中,當我寫入「data$doc$children$Folder[[4]][[3]][[3]]$description」時,它就會出現,我不知道爲什麼會發生這種情況。

第二個問題是:當我使用saveXML檢查是否說明是在第一個地點標記或不....出現這個錯誤..

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

我搜索了這一點,我發現我應該使用data <- xmlTreeParse(Url,useInternalNodes = TRUE)。 ...但這不允許我使用data$doc$children$Folder[[4]][[3]][[3]] ...

所以請問,有沒有辦法將節點添加到xml文件中的這個位置?還是有解決我的問題?

here's我的xml文件。

+0

您似乎想要將HTML表格嵌入到XML文件中。你可以建議在XML文件中使用編號索引而不是元素名稱path -' [[4]] [[3]] [[3]]'不容易看到嗎? – Parfait

+0

我使用'[[4]] [[3]] [[3]]'....我使用這個公式,因爲當我在'data $ doc $ children $ Folder'後使用$時,我只有3個選項,是其他36選項,所以第4號指示第一個主文件夾,[[3]]指示第一個次要文件夾和[[3]]指示第一個地標 –

+0

@Parfait,我發現一種方法來添加html到XML,但仍然存在的問題,我不能將XML保存到我的電腦上的文件,請告訴我,如果你知道嗎? 'data $ doc $ children $ Folder [[4]] [[3]] [[3]] [[「description」]] < - top' –

回答

1

考慮使用getNodeSet找到要添加的XML片段中的特定元素,然後在定義新的孩子一定要引用新元素的父這個節點集:

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") 

輸出

<?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> 
... 
相關問題