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

回答編集履歴

5

2020/12/28 05:47

投稿

sfdust
sfdust

スコア1137

answer CHANGED
@@ -1,5 +1,5 @@
1
1
  下記ではいかがでしょうか
2
- ※読み込むサンプルのxml
2
+ ※読み込むサンプルのXMLファイル(sample.xml
3
3
  ```xml
4
4
  <Result>
5
5
  <SubCodes>
@@ -14,6 +14,7 @@
14
14
  </SubCodes>
15
15
   </Result>
16
16
  ```
17
+  
17
18
  コード(内包表記なし)
18
19
  ```
19
20
  import xml.etree.ElementTree as ET

4

修正

2020/12/28 05:47

投稿

sfdust
sfdust

スコア1137

answer CHANGED
@@ -1,5 +1,21 @@
1
1
  下記ではいかがでしょうか
2
+ ※読み込むサンプルのxml
3
+ ```xml
4
+ <Result>
5
+ <SubCodes>
6
+ <SubCode code="item-code-red-s">
7
+ <Option name="カラー" value="red"/>
8
+ <Option name="サイズ" value="small"/>
9
+ </SubCode>
10
+ <SubCode code="item-code-red-m">
11
+ <Option name="カラー" value="red"/>
12
+ <Option name="サイズ" value="medium"/>
13
+ </SubCode>
14
+ </SubCodes>
15
+  </Result>
2
16
  ```
17
+ コード(内包表記なし)
18
+ ```
3
19
  import xml.etree.ElementTree as ET
4
20
 
5
21
  with open("sample.xml", mode="r", encoding="utf-8") as f:
@@ -9,15 +25,26 @@
9
25
 
10
26
  subcodes = result[0]
11
27
 
12
- result = ET.fromstring(xml_data)
28
+ result_lst = []
13
29
 
30
+ for subcode in subcodes:
14
- subcodes = result[0]
31
+ subcode_lst=[]
32
+ for option in subcode:
33
+ option_lst=[]
34
+ for attr in option.keys():
35
+ if attr in ["value", "name"]:
36
+ option_lst.append(option.attrib[attr])
37
+ subcode_lst.append(':'.join(option_lst))
38
+ result_lst.append("#".join(subcode_lst)+"="+subcode.attrib["code"])
15
39
 
16
- dic = {'subcodes:': ('|'.join(
40
+ dic = {'subcodes':'|'.join(result_lst)}
17
- '#'.join(':'.join(option.attrib[attr] for attr in option.keys() if attr in ["name", "value"])
18
- for option in subcode) + "=" + subcode.attrib["code"]
19
- for subcode in subcodes))}
20
41
 
42
+ print(dic)
21
43
 
44
+
45
+ ```
46
+
22
- print(dic)
47
+ 出力結果
48
+ ```
49
+ >> {'subcodes:': 'カラー:red#サイズ:small=item-code-red-s|カラー:red#サイズ:medium=item-code-red-m'}
23
50
  ```

3

修正

2020/12/28 05:45

投稿

sfdust
sfdust

スコア1137

answer CHANGED
@@ -14,8 +14,8 @@
14
14
  subcodes = result[0]
15
15
 
16
16
  dic = {'subcodes:': ('|'.join(
17
- '#'.join(':'.join(option.attrib[attr] for attr in option.keys())
17
+ '#'.join(':'.join(option.attrib[attr] for attr in option.keys() if attr in ["name", "value"])
18
- for option in subcode) + "=" + subcode.attrib["code"]
18
+ for option in subcode) + "=" + subcode.attrib["code"]
19
19
  for subcode in subcodes))}
20
20
 
21
21
 

2

修正

2020/12/25 01:21

投稿

sfdust
sfdust

スコア1137

answer CHANGED
@@ -9,10 +9,15 @@
9
9
 
10
10
  subcodes = result[0]
11
11
 
12
+ result = ET.fromstring(xml_data)
13
+
14
+ subcodes = result[0]
15
+
12
16
  dic = {'subcodes:': ('|'.join(
13
- '#'.join(f"{option.attrib['name']}:{option.attrib['value']}"
17
+ '#'.join(':'.join(option.attrib[attr] for attr in option.keys())
14
18
  for option in subcode) + "=" + subcode.attrib["code"]
15
19
  for subcode in subcodes))}
16
20
 
21
+
17
22
  print(dic)
18
23
  ```

1

修正

2020/12/24 23:57

投稿

sfdust
sfdust

スコア1137

answer CHANGED
@@ -1,14 +1,15 @@
1
1
  下記ではいかがでしょうか
2
2
  ```
3
+ import xml.etree.ElementTree as ET
4
+
3
5
  with open("sample.xml", mode="r", encoding="utf-8") as f:
4
6
  xml_data = f.read()
5
7
 
6
- import xml.etree.ElementTree as ET
7
-
8
8
  result = ET.fromstring(xml_data)
9
9
 
10
10
  subcodes = result[0]
11
+
11
- dic = {'subcodes':('|'.join(
12
+ dic = {'subcodes:': ('|'.join(
12
13
  '#'.join(f"{option.attrib['name']}:{option.attrib['value']}"
13
14
  for option in subcode) + "=" + subcode.attrib["code"]
14
15
  for subcode in subcodes))}