xml 파일다루기

조회수 738회
<?xml version="1.0" encoding="UTF-8"?><response>
<header>
<resultCode>INFO-00</resultCode>
<resultMsg>NORMAL SERVICE</resultMsg>
</header>
<body>
<items>
<item>
<sgId>20180613</sgId>
<sgTypecode>4</sgTypecode>
<huboid>100000000</huboid>
<sggName>종로구</sggName>
<sdName>서울특별시</sdName>
<wiwName>종로구</wiwName>
<jdName>무소속</jdName>
<name>홍길동</name>
<hanjaName>洪吉童</hanjaName>
</item>
</items>
</body>

만약 xml 파일이 이런식으로 되어있다면,

from bs4 import BeautifulSoup as bs

f = open('상단의파일','r',encoding = 'UTF-8')

l = f.read()

soup = bs(l, 'lxml')


     if x in soup.findAll('item')

         print(x.find('sgld'))

이 함수의 결과값이 none이 뜨는 이유가무엇일가요..? 어떤방식으로해야 돌아갈가요?

1 답변

  • 질문을 하기 전에 코드를 잘 살펴보고 하세요. 안된다고 생각도 안해보고 이곳에 올리면 질문자 실력이 향상되질 않습니다.

    질문자가 작성한 코드에는 두가지 문법적인 문제가 있습니다. 문법적인 문제다라는 것은 오류메세지도 제대로 확인안해봤다는 의미입니다.

    첫째로.

    작성한 xml 은 validation하지 않습니다.

    xml은 1개의 root 만 가져야 합니다. 그런데 <response> 가 root 임에도 </response> 가 누락되어 있습니다.

    둘째로. 소문자 l 과 대문자 I 를 혼동하고 있습니다. 또한 lxml 에 의해 소문자로 변경되므로 sgid 로 찾아야 합니다.

    print(x.find('sgld'))    # sgid
    

    markup 형태(html, xml)의 코드를 작성할때는 꼭 들여쓰기를 습관화하세요

    xml = '''<?xml version="1.0" encoding="UTF-8"?>
    <response>
        <header>
            <resultCode>INFO-00</resultCode>
            <resultMsg>NORMAL SERVICE</resultMsg>
        </header>
        <body>
            <items>
                <item>
                    <sgId>20180613</sgId>
                    <sgTypecode>4</sgTypecode>
                    <huboid>100000000</huboid>
                    <sggName>종로구</sggName>
                    <sdName>서울특별시</sdName>
                    <wiwName>종로구</wiwName>
                    <jdName>무소속</jdName>
                    <name>홍길동</name>
                    <hanjaName>洪吉童</hanjaName>
                </item>
            </items>
        </body>
    </response>'''
    
    from bs4 import BeautifulSoup as bs
    soup = bs(xml, 'lxml')
    for x in soup.findAll('item'):
        print(x.find('sgid'))
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)