public static List<Directive> parseNodeList(NodeList nodeList) {
		/* example:
		<w:fldSimple w:instr="MERGEFIELD &quot;@before-row#list .vars[\&quot;disk-usage-summary\&quot;] as u&quot; \* MERGEFORMAT">
          <w:r w:rsidR="00C47145">
            <w:t>«@before-row#list .vars["disk-usage-summa»</w:t>
          </w:r>
    	</w:fldSimple>

	    <w:r>
          <w:fldChar w:fldCharType="begin" />
        </w:r>
        <w:r>
          <w:instrText xml:space="preserve">MERGEFIELD "@before-row#list .vars[\"disk-usage-summary\"] as u" \* MERGEFORMAT</w:instrText>
        </w:r>
        <w:r>
          <w:fldChar w:fldCharType="separate" />
        </w:r>
	    ... w:r screen representation of directive
        <w:r>
          <w:rPr>
            <w:noProof />
          </w:rPr>
          <w:fldChar w:fldCharType="end" />
        </w:r>
        
        contents of 'w:instrText' can be splitted into many runs, so  
        contents of the elements between w:fldCharType="begin" and w:fldCharType="end" should be merged
		*/
		ArrayList<Directive> directives = new ArrayList<Directive>();
		String mergedDirective = null;
		Node directivePosition = null;

		for (Node n : new NodeListIterAdapter(nodeList)) {
			if (n.getNodeName().equals("w:fldChar")) {
				String fldCharType = n.getAttributes().getNamedItem("w:fldCharType").getNodeValue();
				if (fldCharType.equals("begin")) {
					mergedDirective = "";
					directivePosition = n; 
				} else if (fldCharType.equals("end") || fldCharType.equals("separate")) {
					if (directivePosition != null) {
						directives.add(new Directive(directivePosition, Directive.extractDirective(mergedDirective)));
					}
					mergedDirective = null;
					directivePosition = null;
				} else {
					mergedDirective = null;
					directivePosition = null;
				}
				
			} else if (n.getNodeName().equals("w:instrText")) {
				if (directivePosition != null)
					mergedDirective += n.getTextContent();
			} else if (n.getNodeName().equals("w:fldSimple")) {
				String nodeValue = n.getAttributes().getNamedItem("w:instr").getNodeValue();
				directives.add(new Directive(n, Directive.extractDirective(nodeValue)));
			} else {
			}
		}
		return directives;
	}