lxml xpath How to deal with xml entities
I use lxml (Python 3.7.1) to parse an xml document containing xml entities.
I can't manage to get the right syntax to query an element containing xml entities (", ', etc.).
See the following code:
from lxml import etree
root = etree.XML('''
<root>
<item name="abcd">
<ssitem att="efg"/>
</item>
<item name="hi'jk">
<ssitem att="lmn"/>
</item>
</root>
''')
item = root.xpath(".//item[@name='abcd']") # 1
# item = root.xpath(".//item[@name='hi'jk']") # 2
# item = root.xpath(".//item[@name='hi'jk']") # 3
# item = root.xpath('.//item[@name="hi''jk"]') # 4
if len(item) != 0:
print(len(item))
print(item)
name = item[0].xpath(".//@name")
print(name)
else:
print("Nothing")
When line 1 is uncommented, the code works fine.
When line 2 (or 3, or 4) is uncommented (and other lines are commented), nothing is found.
Why is this the case?
Thanks.
python xpath lxml
add a comment |
I use lxml (Python 3.7.1) to parse an xml document containing xml entities.
I can't manage to get the right syntax to query an element containing xml entities (", ', etc.).
See the following code:
from lxml import etree
root = etree.XML('''
<root>
<item name="abcd">
<ssitem att="efg"/>
</item>
<item name="hi'jk">
<ssitem att="lmn"/>
</item>
</root>
''')
item = root.xpath(".//item[@name='abcd']") # 1
# item = root.xpath(".//item[@name='hi'jk']") # 2
# item = root.xpath(".//item[@name='hi'jk']") # 3
# item = root.xpath('.//item[@name="hi''jk"]') # 4
if len(item) != 0:
print(len(item))
print(item)
name = item[0].xpath(".//@name")
print(name)
else:
print("Nothing")
When line 1 is uncommented, the code works fine.
When line 2 (or 3, or 4) is uncommented (and other lines are commented), nothing is found.
Why is this the case?
Thanks.
python xpath lxml
add a comment |
I use lxml (Python 3.7.1) to parse an xml document containing xml entities.
I can't manage to get the right syntax to query an element containing xml entities (", ', etc.).
See the following code:
from lxml import etree
root = etree.XML('''
<root>
<item name="abcd">
<ssitem att="efg"/>
</item>
<item name="hi'jk">
<ssitem att="lmn"/>
</item>
</root>
''')
item = root.xpath(".//item[@name='abcd']") # 1
# item = root.xpath(".//item[@name='hi'jk']") # 2
# item = root.xpath(".//item[@name='hi'jk']") # 3
# item = root.xpath('.//item[@name="hi''jk"]') # 4
if len(item) != 0:
print(len(item))
print(item)
name = item[0].xpath(".//@name")
print(name)
else:
print("Nothing")
When line 1 is uncommented, the code works fine.
When line 2 (or 3, or 4) is uncommented (and other lines are commented), nothing is found.
Why is this the case?
Thanks.
python xpath lxml
I use lxml (Python 3.7.1) to parse an xml document containing xml entities.
I can't manage to get the right syntax to query an element containing xml entities (", ', etc.).
See the following code:
from lxml import etree
root = etree.XML('''
<root>
<item name="abcd">
<ssitem att="efg"/>
</item>
<item name="hi'jk">
<ssitem att="lmn"/>
</item>
</root>
''')
item = root.xpath(".//item[@name='abcd']") # 1
# item = root.xpath(".//item[@name='hi'jk']") # 2
# item = root.xpath(".//item[@name='hi'jk']") # 3
# item = root.xpath('.//item[@name="hi''jk"]') # 4
if len(item) != 0:
print(len(item))
print(item)
name = item[0].xpath(".//@name")
print(name)
else:
print("Nothing")
When line 1 is uncommented, the code works fine.
When line 2 (or 3, or 4) is uncommented (and other lines are commented), nothing is found.
Why is this the case?
Thanks.
python xpath lxml
python xpath lxml
edited Nov 13 '18 at 22:58
Joel
1,5706719
1,5706719
asked Nov 13 '18 at 22:07
grabo44grabo44
83
83
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
Here ' is part of the encoding in an XML file.
In the XPath query, you should use:
>>> root.xpath(""".//item[@name="hi'jk"]""")
[<Element item at 0x7f91b2b9ae88>]
add a comment |
Consider escaping the single apostrophe with last #4 option:
item = root.xpath('.//item[@name="hi'jk"]') # 4
item
# [<Element item at 0xbe25608>]
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%2f53290232%2flxml-xpath-how-to-deal-with-xml-entities%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
Here ' is part of the encoding in an XML file.
In the XPath query, you should use:
>>> root.xpath(""".//item[@name="hi'jk"]""")
[<Element item at 0x7f91b2b9ae88>]
add a comment |
Here ' is part of the encoding in an XML file.
In the XPath query, you should use:
>>> root.xpath(""".//item[@name="hi'jk"]""")
[<Element item at 0x7f91b2b9ae88>]
add a comment |
Here ' is part of the encoding in an XML file.
In the XPath query, you should use:
>>> root.xpath(""".//item[@name="hi'jk"]""")
[<Element item at 0x7f91b2b9ae88>]
Here ' is part of the encoding in an XML file.
In the XPath query, you should use:
>>> root.xpath(""".//item[@name="hi'jk"]""")
[<Element item at 0x7f91b2b9ae88>]
answered Nov 13 '18 at 22:11
Willem Van OnsemWillem Van Onsem
147k16141231
147k16141231
add a comment |
add a comment |
Consider escaping the single apostrophe with last #4 option:
item = root.xpath('.//item[@name="hi'jk"]') # 4
item
# [<Element item at 0xbe25608>]
add a comment |
Consider escaping the single apostrophe with last #4 option:
item = root.xpath('.//item[@name="hi'jk"]') # 4
item
# [<Element item at 0xbe25608>]
add a comment |
Consider escaping the single apostrophe with last #4 option:
item = root.xpath('.//item[@name="hi'jk"]') # 4
item
# [<Element item at 0xbe25608>]
Consider escaping the single apostrophe with last #4 option:
item = root.xpath('.//item[@name="hi'jk"]') # 4
item
# [<Element item at 0xbe25608>]
answered Nov 13 '18 at 22:31
ParfaitParfait
51.1k84370
51.1k84370
add a comment |
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%2f53290232%2flxml-xpath-how-to-deal-with-xml-entities%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