2019-05-11
<?xml version="1.0"?> <小紙條> <收件人>大元</收件人> <發件人>小張</發件人> <主題>問候</主題> <具體內容>早啊,飯吃了沒? </具體內容> </小紙條>
<?xml version="1.0"?> <小紙條> <收件人>大元</收件人> <發件人>小張</發件人> <主題>問候</主題> <具體內容>早啊,飯吃了沒? </具體內容> </小紙條>
<?xml version="1.0"?> <小紙條> <收件人>大元</收件人> <發件人>小張</發件人> <主題>問候</主題> <具體內容>早啊,飯吃了沒? </具體內容> </小紙條>
<收件人> ... </具體內容>
大元
小張
問候
早啊,飯吃了沒?
<具體內容>早啊,飯吃了沒? </具體內容>
<具體內容 font="新細明體" size="12">早啊,飯吃了沒? </具體內容>
<具體內容>
有以下的標籤:
font
:新細明體
size
:12
<?xml version="1.0"?>
<?xml version="1.0" encoding="UTF-8"?>
(HyperText Markup Language)
<foo/>
代替<foo></foo>
<html>
<head>
<script type="text/javascript" src="loadxmldoc.js">
</script>
</head>
<body>
<script type="text/javascript">
xmlDoc=loadXMLDoc("books.xml");
document.write("xmlDoc is loaded, ready for use");
</script>
</body>
</html>
x <- '<?xml version="1.0"?> <小紙條> <收件人>大元</收件人> <發件人>小張</發件人> <主題>問候</主題> <具體內容>早啊,飯吃了沒? </具體內容> </小紙條> '
. <- strsplit(x, "\n") . <- .[[1]] . <- .[grepl("主題", .)] . <- gsub("<主題>", "", .) gsub("</主題>", "", .)
## [1] " 問候"
library(xml2) doc <- read_xml(x) . <- xml_find_first(doc, "/小紙條/主題") xml_text(.)
## [1] "問候"
<小紙條> <收件人>大元</收件人> <發件人>小張</發件人> <主題>問候</主題> <具體內容>早啊,飯吃了沒? </具體內容> </小紙條>
<小紙條>
是<主題>
的父標籤
<收件人>
、<發件人>
、<主題>
與<具體內容>
都是<小紙條>
的子標籤<小紙條>
是這份XML文件的根<html>
是所有網頁的根
doc <- read_xml(x) class(doc) ## [1] "xml_document" "xml_node" doc ## {xml_document} ## <小紙條> ## [1] <收件人>大元</收件人> ## [2] <發件人>小張</發件人> ## [3] <主題>問候</主題> ## [4] <具體內容>早啊,飯吃了沒? </具體內容> |
root <- xml_root(doc) class(root) ## [1] "xml_document" "xml_node" root ## {xml_document} ## <小紙條> ## [1] <收件人>大元</收件人> ## [2] <發件人>小張</發件人> ## [3] <主題>問候</主題> ## [4] <具體內容>早啊,飯吃了沒? </具體內容> |
<收件人>
、<發件人>
、<主題>
、<具體內容>
是<小紙條>
的子(child)節點## [,1] [,2] ## [1,] 0.500 0.75 ## [2,] 0.125 0.25 ## [3,] 0.375 0.25 ## [4,] 0.625 0.25 ## [5,] 0.875 0.25
node <- xml_root(doc) node ## {xml_document} ## <小紙條> ## [1] <收件人>大元</收件人> ## [2] <發件人>小張</發件人> ## [3] <主題>問候</主題> ## [4] <具體內容>早啊,飯吃了沒? </具體內容> |
|
xml_children(node) ## {xml_nodeset (4)} ## [1] <收件人>大元</收件人> ## [2] <發件人>小張</發件人> ## [3] <主題>問候</主題> ## [4] <具體內容>早啊,飯吃了沒? </具體內容> |
|
node <- xml_children(node)[[2]] node ## {xml_node} ## <發件人> |
|
node <- xml_parent(node) node ## {xml_node} ## <小紙條> ## [1] <收件人>大元</收件人> ## [2] <發件人>小張</發件人> ## [3] <主題>問候</主題> ## [4] <具體內容>早啊,飯吃了沒? </具體內容> |
|
<小紙條> <收件人>大元</收件人> <發件人>小張</發件人> <主題>問候</主題> <具體內容>早啊,飯吃了沒? </具體內容> </小紙條>
/小紙條
小紙條
下的主題
:/小紙條/主題
//主題
xml_find_first(doc, "/小紙條/主題") ## {xml_node} ## <主題> |
|
xml_find_all(doc, "/小紙條/主題") ## {xml_nodeset (1)} ## [1] <主題>問候</主題> |
|
tmp.path <- tempfile(fileext = ".html") download.file("http://homepage.ntu.edu.tw/~wush978/rdataengineer/0080400004.html", destfile = tmp.path) browseURL(tmp.path) x <- read_html(tmp.path)
機關代碼
、機關名稱
等標籤內容,代表的是右邊的標籤內容的「資料名稱」tr
標籤底下的th
與td
th
標籤的內容td
標籤的內容tr
底下的th
. <- xml_find_all(x, "//tr/th") . <- sapply(., xml_text) head(.)
## [1] "機關代碼" "機關名稱" "單位名稱" "機關地址" "聯絡人" "聯絡電話"
tail(.)
## [1] "總決標金額" ## [2] "總決標金額是否公開" ## [3] "契約是否訂有依物價指數調整價金規定" ## [4] "未列物價調整規定說明" ## [5] "履約執行機關" ## [6] "附加說明"
tr
底下的td
th <- xml_find_all(x, "//tr/th") td <- xml_find_all(x, "//tr/td") length(th)
## [1] 116
length(td)
## [1] 214
td
太多了th
旁邊的td
th <- xml_find_all(x, "//tr/th") td <- xml_find_all(x, "//tr/th/../td") length(th)
## [1] 116
length(td)
## [1] 116
th.text <- sapply(th, xml_text) td.text <- sapply(td, xml_text) td.text <- trimws(td.text) td.text[th.text == "機關名稱"]
## [1] "台灣電力股份有限公司"
td.text <- trimws(td.text) td.text[th.text == "標案名稱"]
## [1] "套管插頭等壹批"