あなたは、実際には多くの文脈を続けているわけではありません。プログラミング言語、使用しているXML解析モデル、および特定の要素に属性が必要かどうかを判断するために必要なコンテキスト。あなたの本当のインターフェースがにあるものは何でもと交換 -
ところで - このコードはコンパイルおよびテストされていません。それはアプローチのイラストだけです。
public interface ElementManipulator {
public void manipulateElement(Element elem);
}
public class AManipulator implements ElementManipulator {
public void manipulateElement(Element elem) {
if (elem.name == "something-A-cares-about") {
//add A's attribute(s) to elem
}
}
}
public class BManipulator implements ElementManipulator {
public void manipulateElement(Element elem) {
if (elem.name == "something-B-cares-about") {
//add B's attribute(s) to elem
}
}
}
public class XMLManipulator {
ArrayList<? extends ElementManipulator> manipulators;
public XMLManipulator() {
this.manipulators = new ArrayList<? extends ElementManipulator>();
this.manipulators.add(new AManipulator());
this.manipulators.add(new BManipulator());
}
public void manipulateXMLDocument(XMLDocument doc) {
Element rootElement = doc.getRootElement();
this.manipulateXMLElement(rootElement);
}
/**
* Give the provided element, and all of it's children, recursively,
* to all of the manipulators on the list.
*/
public void manipulateXMLElement(Element elem) {
foreach (ElementManipulator manipulator : manipulators) {
manipulator.manipulateElement(elem);
}
ArrayList<Element> children = elem.getChildren();
foreach(Element child: children) {
this.manipulateXMLElement(child);
}
}
}
私はjava XML Domを使用しています。私はXMLを操作するためのすべての情報を含む1つのコンテキストオブジェクトを持っています。 – BlueDolphin