Skip to content

Commit 7f3638f

Browse files
committed
Preserve Expat qualified names without namespace expansion
Retain raw element and attribute prefixes when namespace_separator is None. Keep expanded names and parser configuration unchanged, with regression coverage in the pyexpat snippet. Assisted-by: OpenAI Codex:model identifier unavailable
1 parent 06007c8 commit 7f3638f

2 files changed

Lines changed: 27 additions & 0 deletions

File tree

‎crates/stdlib/src/pyexpat.rs‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1051,6 +1051,10 @@ mod _pyexpat {
10511051
fn make_name(&self, name: &xml::name::OwnedName) -> String {
10521052
match (&self.namespace_separator, &name.namespace) {
10531053
(Some(sep), Some(ns)) => format!("{}{}{}", ns, sep, name.local_name),
1054+
(None, _) => match &name.prefix {
1055+
Some(prefix) => format!("{prefix}:{}", name.local_name),
1056+
None => name.local_name.clone(),
1057+
},
10541058
_ => name.local_name.clone(),
10551059
}
10561060
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
from xml.parsers import expat
2+
3+
# Without namespace expansion, element and attribute names retain prefixes.
4+
for separator, expected_name, expected_attribute in (
5+
(None, "p:x", "p:a"),
6+
("!", "urn:p!x", "urn:p!a"),
7+
):
8+
for ordered in (False, True):
9+
parser = expat.ParserCreate(namespace_separator=separator)
10+
parser.ordered_attributes = ordered
11+
starts = []
12+
ends = []
13+
parser.StartElementHandler = lambda name, attrs: starts.append((name, attrs))
14+
parser.EndElementHandler = ends.append
15+
parser.Parse('<r xmlns:p="urn:p"><p:x p:a="v" a="u"></p:x></r>', True)
16+
assert [name for name, attrs in starts] == ["r", expected_name]
17+
assert ends == [expected_name, "r"]
18+
expected_attributes = (
19+
[expected_attribute, "v", "a", "u"]
20+
if ordered
21+
else {expected_attribute: "v", "a": "u"}
22+
)
23+
assert starts[1][1] == expected_attributes

0 commit comments

Comments
 (0)