Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement full XML serialization for nodes #368

Open
jdm opened this issue Mar 18, 2019 · 6 comments
Open

Implement full XML serialization for nodes #368

jdm opened this issue Mar 18, 2019 · 6 comments

Comments

@jdm
Copy link
Member

jdm commented Mar 18, 2019

The implementation in https://github.com/servo/html5ever/blob/master/xml5ever/src/serialize/mod.rs is fairly simplistic, and does not reflect the complexity described by https://w3c.github.io/DOM-Parsing/#dfn-xml-serialization.

@Ygg01
Copy link
Contributor

Ygg01 commented Mar 30, 2019

Ok, I'm down with doing this.

My biggest questions are. Should this also add fragment parsing (#271)? Also while digging through the code I found #122 that might be tangentially related.

Right now I'm implementing parts of XML parsing. I'll probably leave fragment parsing for another time and possibly see about fixing #122 at an even later date.

@jdm
Copy link
Member Author

jdm commented Mar 30, 2019

I believe #122 is part of the full serialization algorithm, yes

@pshaughn
Copy link
Member

servo/servo#24920 looks like it's because of a step in this, "Elements not in the HTML namespace containing no children, are serialized using the empty-element tag syntax (i.e., according to the XML EmptyElemTag production). "

@Ygg01
Copy link
Contributor

Ygg01 commented Jan 1, 2020

@jdm yeah. I'm back on this issue. After a long time, I finally have time off. However I notice few problems.

  1. There is no type Document or DocumentFragment.
  2. To fulfil the problematic parts. Namely to get skip end tag in step 14. I need to know if the node has children or not, which I can't get from serializer unless some things are changed.

What would be a preferred solution?

For 1) can see adding extra Node variants, like Node::Document/Node:Document_Fragment
For 2) I assume that I either need to create another method in Serializer akin to start_elem e.g. write_elem(&mut self, name: QualName, attrs: AttrIter, leaf_node: bool).

@jdm
Copy link
Member Author

jdm commented Jan 3, 2020

Yeah, if we need to be able to represent more kinds of nodes then we should add those variants. As for question 2, modifying the Serializer trait to provide the information you require sounds reasonable. If we can pass an argument to start_elem instead of adding a new separate method that's only used by the XML serializer, that might be preferable.

@ktfth
Copy link

ktfth commented Nov 6, 2022

This subject was progressed or we can work on it, to be a good starting point? If not, can you suggest another good first issue @jdm, thank you by now.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants