---
name: "MKDoc::XML::Token"
section: "3pm"
platform: "linux"
package: "libmkdoc-xml-perl"
version: "0.75-6"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/MKDoc::XML::Token"
---

# MKDoc::XML::Token(3pm)

XML Token Object

## NAME

MKDoc::XML::Token - XML Token Object

## SYNOPSIS

```
  my $tokens = MKDoc::XML::Tokenizer->process_data ($some_xml);
  foreach my $token (@{$tokens})
  {
      print "'" . $token->as_string() . "' is text\n" if (defined $token->text());
      print "'" . $token->as_string() . "' is a self closing tag\n" if (defined $token->tag_self_close());
      print "'" . $token->as_string() . "' is an opening tag\n" if (defined $token->tag_open());
      print "'" . $token->as_string() . "' is a closing tag\n" if (defined $token->tag_close());
      print "'" . $token->as_string() . "' is a processing instruction\n" if (defined $token->pi());
      print "'" . $token->as_string() . "' is a declaration\n" if (defined $token->declaration());
      print "'" . $token->as_string() . "' is a comment\n" if (defined $token->comment());
      print "'" . $token->as_string() . "' is a tag\n" if (defined $token->tag());
      print "'" . $token->as_string() . "' is a pseudo-tag (NOT text and NOT tag)\n" if (defined $token->pseudotag());
      print "'" . $token->as_string() . "' is a leaf token (NOT opening tag)\n" if (defined $token->leaf());
  }
```

## SUMMARY

MKDoc::XML::Token is an object representing an XML token produced by MKDoc::XML::Tokenizer.

It has a set of methods to identify the type of token it is, as well as to help building a parsed tree as in MKDoc::XML::TreeBuilder.

## API

### my $token = new MKDoc::XML::Token ($string\_token);

Constructs a new MKDoc::XML::Token object.

### my $string\_token = $token-\>as\_string();

Returns the string representation of this token so that:

```
  MKDoc::XML::Token->new ($token)->as_string eq $token
```

is a tautology.

### my $node = $token-\>leaf();

If this token is not an opening tag, this method will return its corresponding node structure as returned by `$token`-\>**text()**, `$token`-\>**tag\_self\_close()**, etc.

Returns undef otherwise.

### my $node = $token-\>pseudotag();

If this token is a comment, declaration or processing instruction, this method will return `$token`-\>**tag\_comment()**, $**token\_declaration()** or `$token`-\>**pi()** resp.

Returns undef otherwise.

### my $node = $token-\>tag();

If this token is an opening, closing, or self closing tag, this method will return `$token`-\>**tag\_open()**, `$token`-\>**tag\_close()** or `$token`-\>**tag\_self\_close()** resp.

Returns undef otherwise.

### my $node = $token-\>comment();

If this token object represents a declaration, the following structure is returned:

```
  # this is <!-- I like Pie. Pie is good -->
  {
      _tag   => '~comment',
      text   => ' I like Pie. Pie is good ',
  }
```

Returns undef otherwise.

### my $node = $token-\>declaration();

If this token object represents a declaration, the following structure is returned:

```
  # this is <!DOCTYPE foo>
  {
      _tag   => '~declaration',
      text   => 'DOCTYPE foo',
  }
```

Returns undef otherwise.

### my $node = $token-\>pi();

If this token object represents a processing instruction, the following structure is returned:

```
  # this is <?xml version="1.0" charset="UTF-8"?>
  {
      _tag   => '~pi',
      text   => 'xml version="1.0" charset="UTF-8"',
  }
```

Returns undef otherwise.

### my $node = $token-\>tag\_open();

If this token object represents an opening tag, the following structure is returned:

```
  # this is <aTag foo="bar" baz="buz">
  {
      _tag   => 'aTag',
      _open  => 1,
      _close => 0,
      foo    => 'bar',
      baz    => 'buz',
  }
```

Returns undef otherwise.

### my $node = $token-\>tag\_close();

If this token object represents a closing tag, the following structure is returned:

```
  # this is </aTag>
  {
      _tag   => 'aTag',
      _open  => 0,
      _close => 1,
  }
```

Returns undef otherwise.

### my $node = $token-\>tag\_self\_close();

If this token object represents a self-closing tag, the following structure is returned:

```
  # this is <aTag foo="bar" baz="buz" />
  {
      _tag   => 'aTag',
      _open  => 1,
      _close => 1,
      foo    => 'bar',
      baz    => 'buz',
  }
```

Returns undef otherwise.

### my $node = $token-\>text();

If this token object represents a piece of text, then this text is returned. Returns undef otherwise. TRAP! `$token`-\>**text()** returns a false value if this text happens to be '0' or ''. So really you should use:

```
  if (defined $token->text()) {
    ... do stuff...
  }
```

## NOTES

MKDoc::XML::Token works with MKDoc::XML::Tokenizer, which can be used when building a full tree is not necessary. If you need to build a tree, look at MKDoc::XML::TreeBuilder.

## AUTHOR

Copyright 2003 - MKDoc Holdings Ltd.

Author: Jean-Michel Hiver

This module is free software and is distributed under the same license as Perl itself. Use it at your own risk.

## SEE ALSO

MKDoc::XML::Tokenizer MKDoc::XML::TreeBuilder
