回答編集履歴

1

回答修正

2017/07/28 08:42

投稿

can110
can110

スコア38233

test CHANGED
@@ -1,6 +1,62 @@
1
1
  以下のような最低限の`xml`データで再現しました。
2
2
 
3
3
  `soup.find("body")`すると`<body>xmlデータ全体</body>`が返ります。
4
+
5
+
6
+
7
+ #### 回答修正
8
+
9
+ パーサ`lxml`と指定すると、`HTML`パーサとして動作し、誤解釈してしまっているようです。
10
+
11
+ `lxml-xml`と`XML`パーサとして指定することで、正常に動作することが確認できました。
12
+
13
+ 各パーサについては[Installing a parser](https://www.crummy.com/software/BeautifulSoup/bs4/doc/#installing-a-parser)に記載されています。
14
+
15
+
16
+
17
+ ```Python
18
+
19
+ xml = """
20
+
21
+ <?xml version="1.0" encoding="UTF-8"?>
22
+
23
+ <results>
24
+
25
+ <usedcar>
26
+
27
+ <brand>
28
+
29
+ <code>TO</code><name>トヨタ</name>
30
+
31
+ </brand>
32
+
33
+ <body>
34
+
35
+ <code>M</code><name>ミニバン</name>
36
+
37
+ </body>
38
+
39
+ </usedcar>
40
+
41
+ </results>
42
+
43
+ """
44
+
45
+ from bs4 import BeautifulSoup
46
+
47
+ soup = BeautifulSoup(xml,'lxml-xml')
48
+
49
+ print(soup.find("body")) # 正常 <body><code>M</code><name>ミニバン</name></body>
50
+
51
+ print(soup.find("body").find("name")) # 正常 <name>ミニバン</name>
52
+
53
+ ```
54
+
55
+
56
+
57
+ #### 以前の回答
58
+
59
+
4
60
 
5
61
  ちょっと`xml`パーサの動作が不可解です。
6
62