удаление нежелательных узлов xml - PullRequest
3 голосов
/ 27 июня 2010

У меня есть куча XML-файлов с узлами, которые вызывают ненужные осложнения. Я хотел бы удалить эти узлы, но убедиться, что их дети сохранены (не иерархическая структура, а данные). В конце концов я хочу взять данные из каждого .xml и построить кадр данных. Кажется, что xmlTreeParse вместе с xmlToList помогут, но последний хорошо работает только с плоской структурой. Я поиграл с выводом из списка вывода из xmlToList, а затем преобразовал его в фрейм данных, но результат немного странный.

Я подумал о том, чтобы просто написать функцию для просмотра всех файлов и удаления всех ненужных тегов, однако я не знаю, как это сделать в R.

Любые предложения?

Ответы [ 2 ]

3 голосов
/ 28 июня 2010

Это просто сделать в XSLT. Добавьте это к преобразованию идентичности:

<xsl:template match="poop">
   <xsl:apply-templates select="node()"/>
</xsl:template>

Использование регулярных выражений в XML ускоряет приход Старших Богов и не рекомендуется.

0 голосов
/ 27 июня 2010

посмотрите, если это то, что вы ищете, вы можете использовать пакет XML из CRAN для анализа XML-документов. Вы можете использовать следующую тактику, чтобы получить только теги <poop>:

me<-xmlTreeParse(filename,useInternalNodes=T)
pooptags<-xpathApply(me,"//poop")

pooptags будет содержать следующую информацию:

<poop>
  <P3a_Village1>dzemeni</P3a_Village1>
  <P4_HousholdNumber/>
  <P5_VisitNumber>2</P5_VisitNumber>
</poop> 

Вы можете вставить это с помощью команды <?xml version='1.0' ?>, используя команду вставки в R, и записать его в усеченный файл. или вы можете дополнительно извлечь информацию, такую ​​как P3a_Village1, из файла XML, используя xpathApply, например:

village<-xpathApply(me,"//poop/P3a_Village1")

Я надеюсь, что решение - это то, что вы ищете. Пожалуйста, дайте мне знать, если это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...