in reply to Re^2: Ordering meta tag attributes with HTML::Element
in thread Ordering meta tags with HTML::Element

I have no control over the automated process The only solution I have come up with is to do this but not very elegant I was hopping someone would have a better idea
for my $m (sort keys %meta) { my $m_el = HTML::Element->new('meta'); $m_el->attr('0name',$m); $m_el->attr('1content',$meta{$m}); $head->push_content($m_el); } my $out = $body->as_HTML('<>&',' ',{}); $out=~s/0name/name/g; $out=~s/1content/content/g; print $out;

Replies are listed 'Best First'.
Re^4: Ordering meta tag attributes with HTML::Element
by Corion (Patriarch) on Jun 15, 2016 at 09:28 UTC

    If you look at the source code of HTML::Element, you will find that it prefers to sort the attribute keys alphabetically. My approach would be to derive a class from HTML::Element which overrides the to_string method (or whatever) to output the attributes in a more explicit manner. I think something like this was already suggested to you.

    Your approach of hoping that the text will never contain 0name or 1content is also plausible, personally, I would rather look at using one of the template solutions to create text that absolutely must follow a specific format.

      Your approach of hoping that the text will never contain 0name or 1content is also plausible...

      I went to http://www.w3schools.com/tags/tag_meta.asp. I clicked the "Try it Yourself >>" button. I coded up changes to the HTML.

      <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="description" content="Free Web tutorials"> <meta name="keywords" content="HTML,CSS,XML,JavaScript"> <meta name="author" content="Hege Refsnes"> <meta 0name="description" 1content="Free Web tutorials"> <meta 0name="keywords" 1content="HTML,CSS,XML,JavaScript"> <meta 0name="author" 1content="Hege Refsnes"> </head> <body> <p>All meta information goes in the head section...</p> </body> </html>

      I clicked the "See Result >>" button.

      It displayed with no complaints.

      I ran it through the HTML checker at https://validator.w3.org/.

      It complained.

      I stored the webpage on my disk and brought up the webpage in Firefox.

      It displayed the webpage.

      So, as long as one is creating their own HTML and can control the process, then the original poster's code at Re^3: Ordering meta tag attributes with HTML::Element will work.

      But, if one is spidering the Internet, who knows what garbage is out there?

Re^4: Ordering meta tag attributes with HTML::Element
by soonix (Chancellor) on Jun 15, 2016 at 09:45 UTC
    Maybe that "automated process" doesn't process your data, because you misspelt the content of the "Content" attribute of the first "meta" element?
    At least if a lookup is involved, it may simply not find "J K Rolling".