Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:
null
. null
. null
, как если бы это был массив. null
, как если бы это был массив. null
как будто это было значение Throwable. Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null
.
Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html
Можно хотеть посмотреть на то, как можно использовать встроенные функции.NET, чтобы сериализировать и десериализовать объект в XML, вместо того, чтобы создать ToXML()
метод на каждом классе, который является по существу просто Объектом Передачи данных.
я использовал эти методы успешно на нескольких проектах, но don’t имеют детали реализации, удобные прямо сейчас. Я попытаюсь обновить свой ответ с моими собственными примерами когда-то позже.
Вот несколько примеров что возвращенный Google:
Сериализация XML в.NET Venkat Subramaniam http://www.agiledeveloper.com/articles/XMLSerialization.pdf
, Как Сериализировать и Десериализовать объект в XML http://www.dotnetfunda.com/articles/article98.aspx
, Настраивает Вашу сериализацию XML объекта.NET с атрибутами XML.NET http://blogs.microsoft.co.il/blogs/rotemb/archive/2008/07/27/customize-your-net-object-xml-serialization-with-net-xml-attributes.aspx
Я рекомендовал бы использовать XDoc и XElement Системы. Xml. Linq вместо материала XmlDocument. Это было бы лучше, и Вы будете в состоянии использовать питание LINQ в запросах и парсинге Вашего XML:
Используя XElement, Ваш ToXml () метод будет похож на следующее:
public XElement ToXml()
{
XElement element = new XElement("Song",
new XElement("Artist", "bla"),
new XElement("Title", "Foo"));
return element;
}
От объектной модели документа W3C спецификация Уровня 1 (Ядра) (полужирный является моим):
большинство API, определенных этой спецификацией, является интерфейсами, а не классами. Это означает, что фактическая реализация должна только представить методы с определенными именами и определенной операцией, не на самом деле реализуют классы, которые соответствуют непосредственно интерфейсам. Это позволяет API DOM быть реализованными как тонкая фанера сверху унаследованных приложений с их собственными структурами данных, или сверху более новых приложений с различными иерархиями классов. Это также означает, что обычные конструкторы (в Java или смысле C++) не могут использоваться для создания Объектов DOM, так как основные объекты, которые будут созданы, могут иметь мало отношений к интерфейсам DOM . Стандартное решение этого в объектно-ориентированном дизайне состоит в том, чтобы определить методы фабрики, которые создают объекты-экземпляры, которые реализуют различные интерфейсы. На Уровне 1 DOM объекты, реализовывая некоторый интерфейс "X" создаются "createX ()" метод в интерфейсе Document; это вызвано тем, что все Объекты DOM живут в контексте определенного Документа .
AFAIK, Вы не можете создать никакой XmlNode
(XmlElement, XmlAttribute, XmlCDataSection
, и т.д.) кроме XmlDocument
от конструктора.
, Кроме того, обратите внимание, что Вы не можете использовать XmlDocument.AppendChild()
для узлов, которые не создаются через методы фабрики тот же документ. В случае, если у Вас есть узел из другого документа, необходимо использовать XmlDocument.ImportNode()
.
Вам нужен Linq - Система. Xml. Linq, чтобы быть точным.
можно создать XML, использующий XElement с нуля - который должен в значительной степени уладить Вас.
Вы не можете возвратиться XmlElement
или XmlNode
, потому что те объекты всегда и только существуют в контексте владения XmlDocument
.
сериализация XML немного легче, чем возврат XElement
, потому что все, что необходимо сделать, отметить свойства с атрибутами, и сериализатор делает все поколение XML для Вас. (Плюс Вы получают десериализацию бесплатно, предполагая, что у Вас есть конструктор без параметров и, ну, в общем, набор других вещей.)
, С другой стороны, a) необходимо создать XmlSerializer
, чтобы сделать это, b) контакт со свойствами набора не является вполне легкой задачей, которой Вам могло бы понравиться, когда он был и c) Сериализация XML является довольно немой; Вы являетесь неудачливыми, если Вы хотите сделать что-нибудь воображение с XML, Вы генерируете.
В большом количестве случаев, те проблемы не имеют значения один бит. Я для можно было бы отметить мои свойства с атрибутами, чем записал бы метод.
Вы можете вернуть XMLDocument
для метода TOXML
в вашем классе, затем, когда вы собираетесь добавить элемент с результатом документа, просто используйте Что-то вроде:
XmlDocument returnedDocument = Your_Class.ToXML();
XmlDocument finalDocument = new XmlDocument();
XmlElement createdElement = finalDocument.CreateElement("Desired_Element_Name");
createdElement.InnerXML = docResult.InnerXML;
finalDocument.AppendChild(createdElement);
Таким образом, вся ценность для «lede_Element_name» на вашем результате XMLDocument будет весь содержимое возвращенного документа.
Я надеюсь, что это поможет.