Для вышеупомянутого образца XML вы можете попробовать приведенный ниже синтаксический анализатор
public class MainActivity extends Activity {
ArrayList r_no;
int count;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
r_no = new ArrayList();
try {
File file = new File("mnt/sdcard/yourxmlfile.xml");
InputStream is = new FileInputStream(file.getPath());
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new InputSource(is));
doc.getDocumentElement().normalize();
NodeList n = doc.getElementsByTagName("OKV");
for (int j = 0; j < n.getLength(); j++) {
Node node = n.item(j);
Element fstElmnt = (Element) node;
r_no.add(fstElmnt.getAttribute("r"));
}
} catch (Exception e) {
System.out.println("XML Pasing Excpetion = " + e);
}
}
}
Для получения дополнительной информации проверьте официальный документ
Круговые зависимости являются знаком плохого дизайна, неважно, при использовании МОК или нет. Я предлагаю, чтобы Вы сделали модернизацию для предотвращения его. Добавление объекта помощника может быть решением.
Например, заставьте MenuStripItems зависеть только от одной части MainForm, который необходим для них и не в целом.
Можно использовать метод set для введения некоторых зависимостей после конструкции.
Сделайте класс контроллера, который обеспечивает данные и логику который MainForm и MenuStripItem обе потребности избежать циклической ссылки.
Я не вижу, как создание класса помощника или контроллера решает круговую проблему зависимости.
Я предоставлю еще некоторую подробную информацию. MenuStripItems зависят от MainForm, потому что они могут установить Содержание MainForm. После вышеупомянутых предложений скажем, я создаю отдельный интерфейс для Содержания MainForm, IFormContent. MenuStripItem может затем зависеть от IFormContent. Но реализация IFormContent будет с другой стороны зависеть от MainForm, приводящего к круговой зависимости.
Возможно, я должен обратиться к инжекции метода set где-нибудь вместо инжекции конструктора?
Как создаются MenuStrip и MenuStripItems?
Когда я использую IOC, всегда существует отношение 1 к 1 между службой и зависимостями, которые предоставляет контейнер IOC обслуживание. Если службе требуется более одного объекта, она будет иметь отношение 1 к 1 с одним объектом фабрики, который создает несколько элементов. Этот фабричный метод может быть параметризован, чтобы позволить созданным элементам обращаться к их контейнеру.
Я согласен с kgiannakakis:
Циклические зависимости - признак плохого дизайна, независимо от того, используете ли вы IoC или нет. Я предлагаю вам сделать перепроектирование, чтобы избежать этого. Добавление вспомогательного может быть решением.
Чтобы выяснить, какие методы должны быть извлечены в класс-помощник, может помочь следующий процесс:
Предположим, у вас есть класс A и класс B, которые ссылаются друг на друга и создают круговую зависимость. Чтобы выяснить, какие методы следует извлечь во внешний вспомогательный объект, перечислите все методы класса A, используемые классом A, и все методы класса B, используемые классом A. Более короткий из этих двух списков и есть ваш скрытый вспомогательный класс C.
Вдохновлено Miško Hevery http://misko.hevery.com/2008/08/01/circular-dependency-in-constructors-and-dependency-injection/