2016-07-03 3 views
0

Я имею дело с XML-файл, который, как показано нижесинтаксического анализа данных из XML в R

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:obs="http://observation.services.zye.hc.com" xmlns:xsd="http://ws.zye.hc.com/xsd" xmlns:xsd1="http://observation.services.zye.hc.com/xsd" xmlns:xsd2="http://common.zye.hc.com/xsd"> 
<soapenv:Header/> 
<soapenv:Body> 

<obs:createObservations> 

<obs:context> 
<xsd:applicationId>1000</xsd:applicationId> 
<xsd:patid>654321</xsd:patid> 
<xsd:password>Password123</xsd:password> 
<xsd:userNum>TestUser</xsd:userNum> 
</obs:context> 

<obs:attributes> 
<xsd1:aggregateName>Basic</xsd1:aggregateName> 
<xsd1:encounterId>11111</xsd1:encounterId> 
<xsd1:observedDateTime>2016-06-29T16:30:00</xsd1:observedDateTime> 
</obs:attributes> 

<obs:observations> 

<xsd1:code> 
<xsd2:code>22222</xsd2:code> 
<xsd2:codeText>Jane Doe</xsd2:codeText> 
</xsd1:code> 

<xsd1:effectiveTime> 
<xsd2:high></xsd2:high> 
<xsd2:low>2016-06-29T00:00:00</xsd2:low> 
</xsd1:effectiveTime> 

<xsd1:eTicketId>12345</xsd1:eTicketId> 

<xsd1:observationId> 
<xsd1:createTimeStamp>2016-06-29T16:30:17.123456</xsd1:createTimeStamp> 
<xsd1:type>RESULTS</xsd1:type> 
</xsd1:observationId> 

<xsd1:value>Yes</xsd1:value> 

</obs:observations> 

</obs:createObservations> 

</soapenv:Body> 
</soapenv:Envelope> 

Моя цель это заменить значения для элементов

xsd:applicationId 
xsd:patid 
xsd1:encounterId 
xsd1:observedDateTime 
xsd2:codeText 
xsd2:low 
xsd1:type 
xsd1:value 

Я попробовал этот подход ниже

test_xml_parse = xmlParse(assign_the_xml_file_to_a_variable, asText=TRUE) 

test_xml_ns = getNodeSet(test_xml_parse , '/obs:createObservations') 

which(sapply(test_xml_ns = getNodeSet(test_xml_parse , '/obs:createObservations') 
, xmlGetAttr, "name") == "xsd:applicationId") 

Но это не работает, не уверен, где я ошибаюсь.

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

ответ

0

Вы могли бы сделать

x <- test_xml_parse[['/soapenv:Envelope/soapenv:Body/obs:createObservations/*/xsd:applicationId']] 
xmlValue(x) 
# [1] "1000" 
xmlValue(x) <- 1 
xmlValue(x) 
# [1] "1" 

или

ns <- test_xml_parse['/soapenv:Envelope/soapenv:Body/obs:createObservations/*/xsd:applicationId'] 
vals <- c(1) 
for (x in seq_along(ns)) 
    xmlValue(ns[[x]]) <- vals[x] 
+0

, который работал идеально. Есть незначительная проблема. После замены старого «xmlValue» новым значением новый xml-файл «test_xml_parse» теперь содержит тег объявления xml '' Вверху, в первой строке. Как избавиться от этого тега объявления xml? Поскольку это вызывает некоторые ошибки, когда я отправляю новый XML-файл с помощью функции curlPerform –

+0

См. Http://stackoverflow.com/questions/31906034/prevent-adding-first-line-when-using-htmlparse-from-xml-package - вы можете использовать 'xmlRoot (x)'. – lukeA

+0

который работал отлично. Благодарю. +10 за помощь мне в этом дополнительном вопросе :) –

Смежные вопросы