Sample code for 30+ languages & platforms
Dart

XML SearchForTag Method

See more XML Examples

Demonstrates the SearchForTag and SearchForTag2 methods.

The input XML, available at http://www.chilkatsoft.com/data/fruitSearch.xml, is this:

<root>
    <searchRoot>
        <fruit color="red">apple</fruit>
        <fruit color="green">pear</fruit>
        <veg color="orange">carrot</veg>
        <meat animal="cow">beef</meat>
        <xyz>
            <fruit color="blue">blueberry</fruit>
            <veg color="green">broccoli</veg>
        </xyz>
        <fruit color="purple">grape</fruit>
        <cheese color="yellow">cheddar</cheese>
    </searchRoot>
    <fruit color="red">strawberry</fruit>
    <fruit color="orange">peach</fruit>
</root>

Chilkat Dart Downloads

Dart
import 'package:chilkat/chilkat.dart';

void main() {
  var success = false;

  final xml = CkXml();

  // The sample input XML is available at http://www.chilkatsoft.com/data/fruitSearch.xml
  success = true;
  try {
    xml.loadXmlFile('qa_data/xml/fruitSearch.xml');
  } on ChilkatException {
    success = false;
  }
  if (!success) {
    print(xml.lastErrorText);
    return;
  }

  // Search the sub-tree rooted at "searchRoot";
  final xSearchRoot = xml.findChild('searchRoot');

  // Search for all nodes having the tag "fruit";
  var xBeginAfter = xSearchRoot.getSelf();
  var xFound = xSearchRoot.searchForTag(xSearchRoot, 'fruit');
  while (xSearchRoot.lastMethodSuccess) {

    print(xFound.content);

    xBeginAfter = xFound;
    xFound = xSearchRoot.searchForTag(xBeginAfter, 'fruit');
  }

  print('--------------------------');

  // ---------------------------------------------------------------------------------
  // Now do the same, but instead use SearchForTag2
  // which updates the internal reference of the caller instead
  // of returning the found node.

  xBeginAfter = xSearchRoot.getSelf();
  final xSearch = xSearchRoot.getSelf();

  success = true;
  try {
    xSearch.searchForTag2(xBeginAfter, 'fruit');
  } on ChilkatException {
    success = false;
  }
  while (success) {

    print(xSearch.content);

    // Copy the internal references so that the next search
    // begins after the found node.
    xBeginAfter.copyRef(xSearch);
    xSearch.copyRef(xSearchRoot);

    success = true;
    try {
      xSearch.searchForTag2(xBeginAfter, 'fruit');
    } on ChilkatException {
      success = false;
    }
  }
}