XML Parsing Python with xmltodictCalling an external command in PythonWhat are metaclasses in Python?How can I safely create a nested directory in Python?How do I parse a string to a float or int in Python?Does Python have a ternary conditional operator?How do I parse XML in Python?Why can't Python parse this JSON data?Does Python have a string 'contains' substring method?How Do You Parse and Process HTML/XML in PHP?Parse JSON in JavaScript?
voltage of sounds of mp3files
Time travel short story where a man arrives in the late 19th century in a time machine and then sends the machine back into the past
Is there any reason not to eat food that's been dropped on the surface of the moon?
Is the destination of a commercial flight important for the pilot?
Products and sum of cubes in Fibonacci
Dot above capital letter not centred
Greatest common substring
Can a monster with multiattack use this ability if they are missing a limb?
How to be diplomatic in refusing to write code that breaches the privacy of our users
Go Pregnant or Go Home
If you attempt to grapple an opponent that you are hidden from, do they roll at disadvantage?
How do I define a right arrow with bar in LaTeX?
How do we know the LHC results are robust?
Will it be accepted, if there is no ''Main Character" stereotype?
Why does John Bercow say “unlock” after reading out the results of a vote?
Increase performance creating Mandelbrot set in python
What't the meaning of this extra silence?
Was Spock the First Vulcan in Starfleet?
Hide Select Output from T-SQL
Generic lambda vs generic function give different behaviour
What is the intuitive meaning of having a linear relationship between the logs of two variables?
Why Were Madagascar and New Zealand Discovered So Late?
Student evaluations of teaching assistants
What to do with wrong results in talks?
XML Parsing Python with xmltodict
Calling an external command in PythonWhat are metaclasses in Python?How can I safely create a nested directory in Python?How do I parse a string to a float or int in Python?Does Python have a ternary conditional operator?How do I parse XML in Python?Why can't Python parse this JSON data?Does Python have a string 'contains' substring method?How Do You Parse and Process HTML/XML in PHP?Parse JSON in JavaScript?
I need to extract information from various xml files within a directory. They all have the same structure but might have different amounts of values stored in pair " " /pair. I'm using xmltodict to access the different pair "values" /pair and store them in a dict.
The xml unfortunately looks somethin like this:
<license xmlns:="http://www.example.com">
<application name="TEST">
<operation>
<condition implication="stop" name="module">
<arguments>
<pair key="version">1</pair>
</arguments>
</condition>
<condition implication="stop" name="allowed">
<arguments>
<pair key="commandName">value1</pair>
<pair key="commandName">value2</pair>
<pair key="commandName">value3</pair>
<pair key="commandName">value4</pair>
</arguments>
</condition>
</operation>
</application>
</applications>
This is definitely not the best solution but I'm a total beginner and need to make this work. My code looks something like this
if application['@name'] == "Test":
for pair in application['operation']['condition'][1]['arguments']:
if pair["@key"]["#text"] == 'value1':
value1 = 'available'
if pair["@key"]["#text"] == 'value2':
value2 = 'available'
....
Test_dict = 'value1': value1, 'value2': value2....
And this is my output:
if pair["@key"]["#text"] == 'value1':
TypeError: string indices must be integers
How can I get this to work?
EDIT:
Me again, still trying to work this one out.
Jonathans Solution works for all scenarios, except for the one where I have one pair value only. for example:
<license xmlns:="http://www.example.com">
<application name="TEST">
<operation>
<condition implication="stop" name="module">
<arguments>
<pair key="version">1</pair>
</arguments>
</condition>
<condition implication="stop" name="allowed">
<arguments>
<pair key="commandName">value1</pair>
</arguments>
</condition>
</operation>
</application>
</license>
I still get the same error message.
if pair["#text"] == 'value2': TypeError: string indices must be integers
As long as there is more than one pair value this approach works perfectly fine. Any approach on how to fix this?
python xml parsing xmltodict
add a comment |
I need to extract information from various xml files within a directory. They all have the same structure but might have different amounts of values stored in pair " " /pair. I'm using xmltodict to access the different pair "values" /pair and store them in a dict.
The xml unfortunately looks somethin like this:
<license xmlns:="http://www.example.com">
<application name="TEST">
<operation>
<condition implication="stop" name="module">
<arguments>
<pair key="version">1</pair>
</arguments>
</condition>
<condition implication="stop" name="allowed">
<arguments>
<pair key="commandName">value1</pair>
<pair key="commandName">value2</pair>
<pair key="commandName">value3</pair>
<pair key="commandName">value4</pair>
</arguments>
</condition>
</operation>
</application>
</applications>
This is definitely not the best solution but I'm a total beginner and need to make this work. My code looks something like this
if application['@name'] == "Test":
for pair in application['operation']['condition'][1]['arguments']:
if pair["@key"]["#text"] == 'value1':
value1 = 'available'
if pair["@key"]["#text"] == 'value2':
value2 = 'available'
....
Test_dict = 'value1': value1, 'value2': value2....
And this is my output:
if pair["@key"]["#text"] == 'value1':
TypeError: string indices must be integers
How can I get this to work?
EDIT:
Me again, still trying to work this one out.
Jonathans Solution works for all scenarios, except for the one where I have one pair value only. for example:
<license xmlns:="http://www.example.com">
<application name="TEST">
<operation>
<condition implication="stop" name="module">
<arguments>
<pair key="version">1</pair>
</arguments>
</condition>
<condition implication="stop" name="allowed">
<arguments>
<pair key="commandName">value1</pair>
</arguments>
</condition>
</operation>
</application>
</license>
I still get the same error message.
if pair["#text"] == 'value2': TypeError: string indices must be integers
As long as there is more than one pair value this approach works perfectly fine. Any approach on how to fix this?
python xml parsing xmltodict
add a comment |
I need to extract information from various xml files within a directory. They all have the same structure but might have different amounts of values stored in pair " " /pair. I'm using xmltodict to access the different pair "values" /pair and store them in a dict.
The xml unfortunately looks somethin like this:
<license xmlns:="http://www.example.com">
<application name="TEST">
<operation>
<condition implication="stop" name="module">
<arguments>
<pair key="version">1</pair>
</arguments>
</condition>
<condition implication="stop" name="allowed">
<arguments>
<pair key="commandName">value1</pair>
<pair key="commandName">value2</pair>
<pair key="commandName">value3</pair>
<pair key="commandName">value4</pair>
</arguments>
</condition>
</operation>
</application>
</applications>
This is definitely not the best solution but I'm a total beginner and need to make this work. My code looks something like this
if application['@name'] == "Test":
for pair in application['operation']['condition'][1]['arguments']:
if pair["@key"]["#text"] == 'value1':
value1 = 'available'
if pair["@key"]["#text"] == 'value2':
value2 = 'available'
....
Test_dict = 'value1': value1, 'value2': value2....
And this is my output:
if pair["@key"]["#text"] == 'value1':
TypeError: string indices must be integers
How can I get this to work?
EDIT:
Me again, still trying to work this one out.
Jonathans Solution works for all scenarios, except for the one where I have one pair value only. for example:
<license xmlns:="http://www.example.com">
<application name="TEST">
<operation>
<condition implication="stop" name="module">
<arguments>
<pair key="version">1</pair>
</arguments>
</condition>
<condition implication="stop" name="allowed">
<arguments>
<pair key="commandName">value1</pair>
</arguments>
</condition>
</operation>
</application>
</license>
I still get the same error message.
if pair["#text"] == 'value2': TypeError: string indices must be integers
As long as there is more than one pair value this approach works perfectly fine. Any approach on how to fix this?
python xml parsing xmltodict
I need to extract information from various xml files within a directory. They all have the same structure but might have different amounts of values stored in pair " " /pair. I'm using xmltodict to access the different pair "values" /pair and store them in a dict.
The xml unfortunately looks somethin like this:
<license xmlns:="http://www.example.com">
<application name="TEST">
<operation>
<condition implication="stop" name="module">
<arguments>
<pair key="version">1</pair>
</arguments>
</condition>
<condition implication="stop" name="allowed">
<arguments>
<pair key="commandName">value1</pair>
<pair key="commandName">value2</pair>
<pair key="commandName">value3</pair>
<pair key="commandName">value4</pair>
</arguments>
</condition>
</operation>
</application>
</applications>
This is definitely not the best solution but I'm a total beginner and need to make this work. My code looks something like this
if application['@name'] == "Test":
for pair in application['operation']['condition'][1]['arguments']:
if pair["@key"]["#text"] == 'value1':
value1 = 'available'
if pair["@key"]["#text"] == 'value2':
value2 = 'available'
....
Test_dict = 'value1': value1, 'value2': value2....
And this is my output:
if pair["@key"]["#text"] == 'value1':
TypeError: string indices must be integers
How can I get this to work?
EDIT:
Me again, still trying to work this one out.
Jonathans Solution works for all scenarios, except for the one where I have one pair value only. for example:
<license xmlns:="http://www.example.com">
<application name="TEST">
<operation>
<condition implication="stop" name="module">
<arguments>
<pair key="version">1</pair>
</arguments>
</condition>
<condition implication="stop" name="allowed">
<arguments>
<pair key="commandName">value1</pair>
</arguments>
</condition>
</operation>
</application>
</license>
I still get the same error message.
if pair["#text"] == 'value2': TypeError: string indices must be integers
As long as there is more than one pair value this approach works perfectly fine. Any approach on how to fix this?
python xml parsing xmltodict
python xml parsing xmltodict
edited Mar 20 at 16:11
Robert
asked Mar 8 at 10:08
Robert Robert
12
12
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
You're getting that error because you treat the string value inside pair["@key"]
like a dict.
Try using if pair["#text"] == 'value1':
and it should work.
The full code that works for me:
import xmltodict
xml = """
<application name="TEST">
<operation>
<condition implication="stop" name="module">
<arguments>
<pair key="version">1</pair>
</arguments>
</condition>
<condition implication="stop" name="allowed">
<arguments>
<pair key="commandName">value1</pair>
<pair key="commandName">value2</pair>
<pair key="commandName">value3</pair>
<pair key="commandName">value4</pair>
</arguments>
</condition>
</operation>
</application>
"""
d = xmltodict.parse(xml)
if d['application']['@name'] == "TEST":
for pair in d['application']['operation']['condition'][1]['arguments']['pair']:
if pair["#text"] == 'value1':
value1 = 'available'
if pair["#text"] == 'value2':
value2 = 'available'
print(value1, value2)
I updated the main question. Any chance you could look over it again?
– Robert
Mar 21 at 8:36
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55060921%2fxml-parsing-python-with-xmltodict%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
You're getting that error because you treat the string value inside pair["@key"]
like a dict.
Try using if pair["#text"] == 'value1':
and it should work.
The full code that works for me:
import xmltodict
xml = """
<application name="TEST">
<operation>
<condition implication="stop" name="module">
<arguments>
<pair key="version">1</pair>
</arguments>
</condition>
<condition implication="stop" name="allowed">
<arguments>
<pair key="commandName">value1</pair>
<pair key="commandName">value2</pair>
<pair key="commandName">value3</pair>
<pair key="commandName">value4</pair>
</arguments>
</condition>
</operation>
</application>
"""
d = xmltodict.parse(xml)
if d['application']['@name'] == "TEST":
for pair in d['application']['operation']['condition'][1]['arguments']['pair']:
if pair["#text"] == 'value1':
value1 = 'available'
if pair["#text"] == 'value2':
value2 = 'available'
print(value1, value2)
I updated the main question. Any chance you could look over it again?
– Robert
Mar 21 at 8:36
add a comment |
You're getting that error because you treat the string value inside pair["@key"]
like a dict.
Try using if pair["#text"] == 'value1':
and it should work.
The full code that works for me:
import xmltodict
xml = """
<application name="TEST">
<operation>
<condition implication="stop" name="module">
<arguments>
<pair key="version">1</pair>
</arguments>
</condition>
<condition implication="stop" name="allowed">
<arguments>
<pair key="commandName">value1</pair>
<pair key="commandName">value2</pair>
<pair key="commandName">value3</pair>
<pair key="commandName">value4</pair>
</arguments>
</condition>
</operation>
</application>
"""
d = xmltodict.parse(xml)
if d['application']['@name'] == "TEST":
for pair in d['application']['operation']['condition'][1]['arguments']['pair']:
if pair["#text"] == 'value1':
value1 = 'available'
if pair["#text"] == 'value2':
value2 = 'available'
print(value1, value2)
I updated the main question. Any chance you could look over it again?
– Robert
Mar 21 at 8:36
add a comment |
You're getting that error because you treat the string value inside pair["@key"]
like a dict.
Try using if pair["#text"] == 'value1':
and it should work.
The full code that works for me:
import xmltodict
xml = """
<application name="TEST">
<operation>
<condition implication="stop" name="module">
<arguments>
<pair key="version">1</pair>
</arguments>
</condition>
<condition implication="stop" name="allowed">
<arguments>
<pair key="commandName">value1</pair>
<pair key="commandName">value2</pair>
<pair key="commandName">value3</pair>
<pair key="commandName">value4</pair>
</arguments>
</condition>
</operation>
</application>
"""
d = xmltodict.parse(xml)
if d['application']['@name'] == "TEST":
for pair in d['application']['operation']['condition'][1]['arguments']['pair']:
if pair["#text"] == 'value1':
value1 = 'available'
if pair["#text"] == 'value2':
value2 = 'available'
print(value1, value2)
You're getting that error because you treat the string value inside pair["@key"]
like a dict.
Try using if pair["#text"] == 'value1':
and it should work.
The full code that works for me:
import xmltodict
xml = """
<application name="TEST">
<operation>
<condition implication="stop" name="module">
<arguments>
<pair key="version">1</pair>
</arguments>
</condition>
<condition implication="stop" name="allowed">
<arguments>
<pair key="commandName">value1</pair>
<pair key="commandName">value2</pair>
<pair key="commandName">value3</pair>
<pair key="commandName">value4</pair>
</arguments>
</condition>
</operation>
</application>
"""
d = xmltodict.parse(xml)
if d['application']['@name'] == "TEST":
for pair in d['application']['operation']['condition'][1]['arguments']['pair']:
if pair["#text"] == 'value1':
value1 = 'available'
if pair["#text"] == 'value2':
value2 = 'available'
print(value1, value2)
answered Mar 8 at 10:29
Jonathan ShemerJonathan Shemer
213
213
I updated the main question. Any chance you could look over it again?
– Robert
Mar 21 at 8:36
add a comment |
I updated the main question. Any chance you could look over it again?
– Robert
Mar 21 at 8:36
I updated the main question. Any chance you could look over it again?
– Robert
Mar 21 at 8:36
I updated the main question. Any chance you could look over it again?
– Robert
Mar 21 at 8:36
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55060921%2fxml-parsing-python-with-xmltodict%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown