在特定条件的R中的字符向量中的单词放置

时间:2015-08-14 10:23:18

标签: xml r

我无法使标题正确。对不起!
我输入的xml文件如下,它是一个字符向量:

[1]<step>
[2]<caution-ref>
[3]<h5><hdtitle>Caution</hdtitle></h5>
[4]Refer to
[5]<object-link object-id="183615"></object-link> in Cautions and
[6]Notices.
[7]</caution-ref>

我想在[1]<step>之前删除[2]<caution-ref>,并将其放在[7]</caution-ref>之后。

重要提示:所有文件在[2]处不包含<caution-ref>,在[7]处不包含</caution-ref>。下一个</caution-ref>可能出现在任何地方。即[4] / [5] / [n]等

所以,输出如下

[1]<caution-ref>
[2]<h5><hdtitle>Caution</hdtitle></h5>
[3]Refer to
[4]<object-link object-id="183615"></object-link> in Cautions and
[5]Notices.
[6]</caution-ref><step>

这是我的代码,它并不适用于所有情况

#x1 is the input file
#I have added conditions for exceptions handling
x1 <- readLines("test.xml")
x2 <- x1
x3 <- character(length(x2))

for ( i in 1:length(x1)){ 
  if (grepl("<step",x1[i])==TRUE & grepl("<caution-ref",x1[i+1])==TRUE & grepl("</step",x1[i])==F & grepl("</step",x1[i+1])==F)
  {
    x2[i]<- gsub("<step>","",x1[i])

    x3 <- x2
    for ( a in 1:length(x2)){ 
      if (grepl("</caution-ref>",x2[a])==TRUE & grepl("</step>",x2[a+1])==F & grepl("</step>",x2[a])==F & grepl("<step>",x2[a])==F & grepl("<step>",x2[a+1])==F)
      {
        x3[a]<- gsub("</caution-ref>","</caution-ref><step>",x2[a])
        x2[a] <- x3[a]
      }}}
  else{
    x3[i] <- x2[i]
  }
}

x3 <- x3[!is.na(x3)]
x3 <- x3[sapply(x3, nchar) > 0] 

感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

这是一种非常粗略的方式,可以做出许多假设,但它适用于您的示例:

x2 <- x1

stepIdx <- grep("<step>", x1)
endIdx <- grep("</caution-ref>", x1)

x2[endIdx] <- "</caution-ref><step>"
x2 <- x2[-stepIdx]

它假设<step></caution-ref>始终是一行,并且不会检查结构不是<step>然后是{{1}的封闭的情况} ... <caution-ref>等等没有异常处理。

如果您需要,请参阅下面的结果。

</caution-ref>