我无法使标题正确。对不起!
我输入的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]
感谢任何帮助!
答案 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>