使用R编辑或添加xml中的文本

使用R编辑或添加xml中的文本,r,xml,R,Xml,我有一个很大的xml文档(超过3000行)。回溯:我的调查软件允许导出为xml文件。为了节省一些工作,我想自动将问题翻译成不同的语言(19!),然后将它们添加到这个xml中。在下面的例子中,有1个德语问题,翻译为英语和波斯语。我想要实现什么: 插入子对象 并将xml与新的子项一起保存 <QUESTIONBLOCK PLACE="5" TARGETLAYER="0" RANDOMIZED="false" NAME="&qu

我有一个很大的xml文档(超过3000行)。回溯:我的调查软件允许导出为xml文件。为了节省一些工作,我想自动将问题翻译成不同的语言(19!),然后将它们添加到这个xml中。在下面的例子中,有1个德语问题,翻译为英语和波斯语。我想要实现什么: 插入子对象 并将xml与新的子项一起保存

<QUESTIONBLOCK PLACE="5" TARGETLAYER="0" RANDOMIZED="false" NAME="" TUTOR="false">
<META KEY="KEEP_TOGETHER" VALUE="false"/>
<META KEY="METAKEY_ONLINE_QUESTION_SPACE" VALUE="DEFAULT"/>
<META KEY="METAKEY_VALIDATION_RULE" VALUE=""/>
<META KEY="METAKEY_TWO_COLUMN_PAPER" VALUE="false"/>
<EXPLANATION PLACE="1" NAME="[b]5. Seit wann wohnen Sie in Deutschland, Leipzig bzw. Ihrem 
Wohngebiet? Bitte tragen Sie das Jahr ein." TUTOR="false">
<META KEY="METAKEY_ONLINE_QUESTION_SPACE" VALUE="DEFAULT"/>
<INTLVAL KEY="NAME">
<LANGENTRY LANG="en" VALUE="[b]5. Since when do you live in Germany, Leipzig or the residential area 
you are living at the moment? Please enter the year. "/>
<LANGENTRY LANG="fa" VALUE="&#x200c;&#x640;  &#x627;&#x632; &#x686;&#x647; 
&#x632;&#x645;&#x627;&#x646;&#x6cc; &#x62a;&#x627;&#x6a9;&#x646;&#x648;&#x646; &#x62f;&#x631; 
&#x622;&#x644;&#x645;&#x627;&#x646; &#x628;&#x62a;&#x631;&#x62a;&#x6cc;&#x628; &#x62f;&#x631; 
&#x644;&#x627;&#x6cc;&#x67e;&#x632;&#x6cc;&#x6af; &#x6cc;&#x627; &#x645;&#x646;&#x637;&#x642;&#x647; 
&#x645;&#x633;&#x6a9;&#x648;&#x646;&#x6cc; &#x62e;&#x648;&#x62f; &#x632;&#x646;&#x62f;&#x6af;&#x6cc; 
&#x645;&#x6cc; &#x6a9;&#x646;&#x6cc;&#x62f;&#x61f;"/>
</INTLVAL>
</EXPLANATION>

这就是我尝试过的:
xml\u find\u all(xml,xpath=“//LANGENTRY/@VALUE”)%%>%xml\u text()
但我不知道如何更改现有文本或添加新的子级

此外,我还必须找到问题。在示例中,它是问号块位置“5”。我想使用管道或循环来处理一个接一个的问题,并添加翻译。然后我可以将完成的XML导入到软件中

我希望这是清楚的;)

考虑一下,设计用于转换XML文件的专用语言,您可以在R到样式表之间传递参数(语言类型和翻译文本)进行转换。您可以使用
XSLT
包(与
xml2的姊妹)运行xslt1.0脚本。注意:XSLT是一种工业语言,因此可以移植到其他语言(Java、Python、PHP)中,并且这些语言都有参数接口

具体来说,运行模板以原样复制XML,然后在搜索原始文本后有条件地将参数绑定到
INTLVAL
节点下的新
LANGENTRY
节点

XSLT(另存为.xsl文件,一个特殊的.xml文件)


R(用循环演示)

库(xml2)
库(xslt)
#阅读XML和XSLT

doc我会这样做,但是HTML实体有一个问题,我不知道为什么要替换它们

library(xml2)

xml <- read_xml("waschi.xml")

x <- xml_new_root("LANGENTRY")
langentry <- xml_find_first(x, "//LANGENTRY")
xml_set_attr(langentry, "LANG", "ru")
xml_set_attr(langentry, "VALUE", "text text text")

intlval <- xml_find_first(xml, "//INTLVAL")
xml_add_child(intlval, langentry)

write_xml(xml, "waschi_new.xml")
库(xml2)
xml