/* Desugar and compile: java -classpath xact-all.jar dk.brics.xact.desugar.Main Buggy.xact javac -classpath xact-all.jar Buggy.java Analyze: java -Ddk.brics.xact.NamespaceContextClass=Buggy \ -Ddk.brics.xact.Schemas=http://www.brics.dk/ixwt/examples/business_card_list1.xsd:http://www.brics.dk/ixwt/exercises/xhtml1-transitional.rng \ -classpath xact-all.jar:. dk.brics.xact.analysis.Main Buggy Execute: java -Ddk.brics.xact.NamespaceContextClass=Buggy \ -Ddk.brics.xact.Schemas=http://www.brics.dk/ixwt/examples/business_card_list1.xsd:http://www.brics.dk/ixwt/exercises/xhtml1-transitional.rng \ -classpath xact-all.jar:. Buggy */ import dk.brics.xact.*; public class Buggy { @DefaultXPathNamespace public static final String b = "http://businesscard.org"; @DefaultConstantNamespace public static final String h = "http://www.w3.org/1999/xhtml"; @Namespace public static final String s = "http://www.w3.org/2001/XMLSchema"; public @Type("h:html[s:string TITLE, h:Flow MAIN]") XML wrapper; public @Type("h:html") XML transform(@Type("b:cardlist") XML cardlist) { return wrapper.plug("TITLE", "My Phone List") .plug("MAIN", makeList(cardlist)); } private XML makeList(XML x) { XML r = [[<[h:li CARDS]>]]; for (XML c : x.select("card[phone]")) r = r.plug("CARDS", [[
  • <{ c.select("name/text()") }>, phone: <{ c.select("phone/text()") }>
  • <[h:li CARDS]>]]); return r.close(); } private void setDefaultWrapper(String color) { wrapper = [[ <[s:string TITLE]>

    <[s:string TITLE]>

    <[h:Flow MAIN]> ]].plug("COLOR", color); } public static void main(String[] args) throws java.io.IOException { Buggy b = new Buggy(); b.setDefaultWrapper("white"); XML cardlist = XML.get("file:cardlist.xml", "b:cardlist"); XML xhtml = b.transform(cardlist); xhtml = xhtml.analyze("h:html"); System.out.println(xhtml); } }