ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
From: Hans Hagen <pragma@wxs.nl>
To: ntg-context@ntg.nl
Subject: Re: Ctx & XML
Date: Thu, 11 Dec 2014 10:10:16 +0100	[thread overview]
Message-ID: <54895F78.6080309@wxs.nl> (raw)
In-Reply-To: <op.xqo0lyvltpjj8f@lpr>

On 12/11/2014 8:33 AM, Procházka Lukáš Ing. - Pontex s. r. o. wrote:
> Hello,
>
> On Thu, 11 Dec 2014 02:24:24 +0100, Hans Hagen <pragma@wxs.nl> wrote:
>
>> On 12/10/2014 11:08 PM, Lukáš Procházka wrote:
>>
>> I assume that you also want the content of elements, not just the
>> attributes.
>
> Yes...
>
>>> Or how to achieve this in a best way under Ctx: XML file -> Lua
>>> table/tree?
>>
>> It all depends on what kin dof table you want (if the content is an
>> indexed table and attributes keys then you have the problem that the
>> element cannot be a key too as it can clash) .. anyway, it's no big deal
>> to provide a stupid table, so I can provide something because after all
>> the loaded xml file is a table already.
>
> It would be great.
>
>> local x = xml.load("file.xml")
>>
>> local t = xml.totable(x)
>>
>> where x is an index/hash mix plus _tag, _type and _namespace fields as
>> well (after all I assume that you need to know that too).
>>
>> (btw, I bet that you can do what you want with the existing
>> functionality as well, so there is not much benefit in such a table)
>>
>> Probably in the next upload,
>
> .... Means - some functionality (for me to test or to play with) might
> be available tomorrow morning?
>
>> Hans
>
> BTW, I prepared a really-simple-XML-test which shows XML -> Lua
> table/tree conversion, which I'd like to achieve (and which (approx.)
> provides LuaXml lib).
>
> ---- XML
> <a aaa="AAA">
>    <b bbb="B1"/>
>    <b bbb="B2">
>      c
>    </b>
> </a>
> ----
>
> ---- Lua representation
> { [0] = "a", -- Element name
>    { [0] = "b", -- Element name
>      -- No nested members
>      bbb = "B1", -- Atts
>    },
>    { [0] = "b", -- Element name
>      { "c", }, -- Nested member
>      bbb = "B2", -- Atts
>    },
>    aaa = "AAA", -- Atts
> }
> ----

that already makes assumptions that it's just data ... the context xml 
parser is a roundtrip one so a bit more control is provided:

local str = [[
<?xml version="1.0" ?>
<a one="1">
     <!-- rubish -->
   <b two="1"/>
   <b two="2">
     c &gt; d
   </b>
</a>
]]

I've added some flags:

inspect(xml.totable(xml.convert(str)))

table={
  {
   "xml version=\"1.0\" ",
   ["_type"]="instruction",
  },
  "\
",
  {
   "\
     ",
   {
    " rubish ",
    ["_type"]="comment",
   },
   "\
   ",
   {
    ["_tag"]="b",
    ["_type"]="_element",
    ["two"]="1",
   },
   "\
   ",
   {
    "\
     c > d\
   ",
    ["_tag"]="b",
    ["_type"]="_element",
    ["two"]="2",
   },
   "\
",
   ["_tag"]="a",
   ["_type"]="_element",
   ["one"]="1",
  },
  ["_type"]="root",
}

inspect(xml.totable(xml.convert(str),true))

table={
  {
   "xml version=\"1.0\"",
   ["_type"]="instruction",
  },
  {
   {
    "rubish",
    ["_type"]="comment",
   },
   {
    ["_tag"]="b",
    ["_type"]="_element",
    ["two"]="1",
   },
   {
    "c > d",
    ["_tag"]="b",
    ["_type"]="_element",
    ["two"]="2",
   },
   ["_tag"]="a",
   ["_type"]="_element",
   ["one"]="1",
  },
  ["_type"]="root",
}

inspect(xml.totable(xml.convert(str),true,true))

table={
  {
   [0]="a",
   {
    [0]="b",
    ["two"]="1",
   },
   {
    [0]="b",
    "c > d",
    ["two"]="2",
   },
   ["one"]="1",
  },
}

The last one is yours. Of course in all cases you loose info that is 
present in the original representation (where you can also access the
nodes via expressions). Don't expect additional helpers for this 
'totable' variant.

Hans


-----------------------------------------------------------------
                                           Hans Hagen | PRAGMA ADE
               Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
     tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com
                                              | www.pragma-pod.nl
-----------------------------------------------------------------
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________

  reply	other threads:[~2014-12-11  9:10 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-12-10 22:08 Lukáš Procházka
2014-12-11  1:24 ` Hans Hagen
2014-12-11  7:33   ` Procházka Lukáš Ing. - Pontex s. r. o.
2014-12-11  9:10     ` Hans Hagen [this message]
2014-12-11 11:25       ` Procházka Lukáš Ing. - Pontex s. r. o.
2014-12-11 13:09         ` Hans Hagen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=54895F78.6080309@wxs.nl \
    --to=pragma@wxs.nl \
    --cc=ntg-context@ntg.nl \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).