teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

エラーの追記

2020/12/28 05:29

投稿

AbcdefgFirst
AbcdefgFirst

スコア33

title CHANGED
File without changes
body CHANGED
@@ -1,4 +1,4 @@
1
- いつもお世話になっております。
1
+ ![イメージ説明](500eb194039075ffed7864e59193e4ef.png)いつもお世話になっております。
2
2
  下記のようなxmlから辞書に変換したいのですが、自分の知識では正確な書き方が分かりませんでした。
3
3
 
4
4
  ### 補足事項
@@ -78,5 +78,5 @@
78
78
 
79
79
  ```
80
80
 
81
- お力添えを頂けませんでしょうか。
82
- くお願い致し
81
+ エラー画面を添付しました
82
+ このoptionの部分でInstance of dict has no attrib memberとなります。

1

誤字

2020/12/28 05:29

投稿

AbcdefgFirst
AbcdefgFirst

スコア33

title CHANGED
File without changes
body CHANGED
@@ -1,5 +1,82 @@
1
- お世話になっております。
1
+ いつもお世話になっております。
2
+ 下記のようなxmlから辞書に変換したいのですが、自分の知識では正確な書き方が分かりませんでした。
2
3
 
4
+ ### 補足事項
5
+ ・欲しい辞書のキー⇒subcodesで固定
6
+
7
+ ・欲しい辞書の値
8
+ {option name属性}:{option value属性}#{option name属性}:{option value属性}={SubCodeのcode属性} |
9
+ {option name属性}:{option value属性}#{option name属性}:{option value属性}={SubCodeのcode属性}
10
+
11
+ Subcode要素が増えたら区切り「|」の数が増えます。
12
+ Option要素が増えたら区切り「#」の数が増えます。
13
+ Option要素の数は変動しますが、各Subcode要素の中に入るOptionの数と並びは共通です。
14
+
15
+ 分かり辛く申し訳ありません。。
16
+
17
+ ```xml
18
+ <Result>
19
+ <SubCodes>
20
+ <SubCode code="item-code-red-s">
21
+ <Option name="カラー" value="red"/>
22
+ <Option name="サイズ" value="small"/>
23
+ </SubCode>
24
+ <SubCode code="item-code-red-m">
25
+ <Option name="カラー" value="red"/>
26
+ <Option name="サイズ" value="medium"/>
27
+ </SubCode>
28
+      ・
29
+      ・(中略)
30
+      ・
31
+ </SubCodes>
32
+  </Result>
33
+ ```
34
+
35
+ 欲しい辞書型↓
3
36
  ```python
4
- dic=
37
+ dict = {'subcodes:':'カラー:red#サイズ:small=item-code-red-s|カラー:red#サイズ:medium=item-code-red-m'}
5
- ```
38
+ ```
39
+
40
+ ### 試したコード
41
+ 色々書いたり消したりして今のところ下記のコードになったのですが、これだと希望の区切り文字がバラバラのため区切り文字を変化させるのが難く躓いております。
42
+ ```python
43
+ import xml.etree.ElementTree as ET
44
+
45
+ subcodes = root.findall('Result/SubCodes/SubCode')
46
+ dict = {}
47
+ for subcode in subcodes:
48
+ lst = []
49
+ code = subcode.attrib['code']
50
+ options = subcode.findall('Option')
51
+
52
+ for option in options:
53
+ lst.append(option.attrib['name'])
54
+ lst.append(option.attrib['value'])
55
+
56
+ lst.append(code)
57
+ print(lst)
58
+
59
+ '''
60
+ #一つの区切り文字しかできない
61
+ dict['subcodes'] = ','.join(lst)
62
+
63
+ #要素数が変動するので何番目などで条件分けできない
64
+ str = ''
65
+ for idx, val in lst:
66
+ if idx == 0:
67
+ str += val + ':'
68
+     (略)
69
+ '''
70
+
71
+
72
+
73
+ #lst
74
+ #['カラー', 'red', 'サイズ', 'small', 'item-code-red-s']
75
+ #['カラー', 'red', 'サイズ', 'medium', 'item-code-red-m']
76
+
77
+
78
+
79
+ ```
80
+
81
+ お力添えを頂けませんでしょうか。
82
+ 宜しくお願い致します。