2013-12-09 4 views
-2

xml 구문 분석과 관련하여 질문이 있습니다. 예를 들어 공백이있는 태그가 있습니다.R XML 태그에서 정보를 추출하는 방법

<item1 id=rt name ="th"> 
<point1>1254</point1> 
<point2>1254</point2> 
</item> 

이 태그에서 ID와 이름을 어떻게 추출합니까?

필자는 나머지 분석을 위해 필요한만큼 R을 사용하고 있지만 펄과 파이썬으로 파일을 분석 할 수도 있습니다. 최상의 솔루션은 무엇입니까?

+5

이 실제 데이터입니다 : 여기 당신이 더 그것으로 재생하려면 행동 정규식

? 첫 번째 태그는 올바른 형식의 XML이 아니며 id 값 주변에 따옴표가 없습니다. 그것이 사용자가 가지고있는 데이터라면 XML 도구를 사용할 수 없을 것입니다. – mirod

답변

5

당신은 XML 패키지를 사용하여, 예를 들어,이 작업을 수행 할 수 있습니다 데이터가 아니라 포맷되지 않은 경우

, 당신은 내가 위에서처럼 데이터를 포맷하거나 읽어야

tt <- '<?xml version="1.0" encoding="utf-8"?> 
<item id="rt" name ="th"> 
    <point1>1254</point1> 
    <point2>1254</point2> 
</item> 
' 

library(XML) 
xpathSApply(doc,'//item',xmlGetAttr,'id') 
[1] "rt" 

편집을하여 데이터를 한 줄씩 검색하고 정규식을 사용하여 정보를 추출합니다 (정규식을 사용하기 위해 XML 태그와 함께 사용하지 않는 것이 좋습니다)

tt <- '<item1 id=rt name ="th"> 
<point1>1254</point1> 
<point2>1254</point2> 
</item> 
    ' 

    ll <- readLines(textConnection(tt)) 
    gsub('.*id=(.*)[ ]name.*','\\1',ll[1]) 
[1] "rt" 
+0

입력을 변경했습니다. 위에서 @mirod가 지적했듯이, 입력은'id = "rt"'가 아니라'id = rt'입니다. – simbabque

+0

@simbabque 예, XML 형식이 잘못되었다는 것을 알고 있습니다 (item1 태그가 아닌 항목). 내 대답은 R 초보 사용자가 XML 패키지를 사용하는 방법을 보여줍니다. – agstudy

+1

충분합니다. 그 경우 나는 그것을 가리 키도록 제안합니다 (지금 당신이 한). 그렇지 않으면 작동하지 않는다고 불평 할 수 있습니다. ;-) – simbabque

0

정규식은 어떻습니까?

/=\K\W?\K\w+/g

=\K 발견하지만 =

\W?\K 발견을 저장하지 않고 태그 전에 잠재적 인용 부호를 저장하지 않습니다.

\w+은 (는) 귀하의 태그입니다.

당신은 라인으로 파일 라인을 읽고, 배열로 같은 당신의 일치를 저장할 수 있습니다

my @matches = $line =~ /=\K\W?\K\w+/g;

을 그리고 개별 요소에 액세스 할 수 $matches[]를 사용합니다. http://regexr.com?37im8

관련 문제