Я использую реализацию этого интерфейса:
public interface IResolver
{
object Resolve(Type type);
object Resolve(string name);
T Resolve<T>() where T : class;
T Resolve<T>(string name) where T : class;
}
, Который на самом деле обертывается в глобальный статический класс, например:
public static class Resolver // : IResolver
{
private static IResolver _current;
public static object Resolve(Type type)
{
return Current.Resolve(type);
}
public static object Resolve(string name)
{
return Current.Resolve(name);
}
public static T Resolve<T>() where T : class
{
return Current.Resolve<T>();
}
public static T Resolve<T>(string name) where T : class
{
return Current.Resolve<T>(name);
}
private static IResolver Current
{
get
{
if (_current == null)
{
_current = new SpringResolver();
}
return _current;
}
}
}
Также я пытаюсь следовать, простое правило - используют класс Преобразователя максимально меньше, вместо этого вводят сервисы в объектах, которым нужны те сервисы.
В зависимости от того, что вы хотите сделать, вы можете захотеть использовать некоторые инструменты, специфичные для XML (для обработки кодировок символов, для поддержания правильного формата XML и т. Д.). Вы можете использовать обычные линейно-ориентированные инструменты, но если вы не осторожно (или делая что-нибудь тривиальное) вы можете легко создать несовместимый XML.
Я использую набор командной строки XMLStarlet . Это набор утилит командной строки для анализа и обработки XML.
Большинство людей, вероятно, использовали бы sed для редактирования строк из сценария bash. если ты действительно заботится о синтаксическом анализе XML, а затем используйте что-то вроде Perl, у которого есть готовый синтаксический анализатор XML.
Уродливо / небезопасно, но иногда проще всего вызвать sed / perl / awk из bash
Using xmlstarlet:
xmlstarlet val -e file.xml
xmlstarlet ed -u "//settings/setting/@name" -v 'local directory2' file.xml
xmlstarlet ed -u "//settings[1]/setting/@name" -v 'local directory2' file.xml
# edit file inplace
xmlstarlet ed -L -u "//settings/setting/@name" -v 'local directory2' file.xml