Написать XDocument с аннотациями - PullRequest
0 голосов
/ 22 августа 2010

У меня есть XDocument, где я добавил несколько аннотаций (.AddAnnotation).Теперь я хочу написать документ с этими аннотациями.И .ToString, и .WriteTo будут отбрасывать аннотации, поэтому они не будут работать.По сути, мне нужен собственный XML-писатель, но абстрактный класс XmlWriter не имеет никакого представления об аннотациях к элементам и атрибутам.Конкретная проблема заключается в том, что мне нужно написать некоторые вещи перед элементом с определенной аннотацией и той же вещью с атрибутами.

Решение, при котором мне не нужно писать каждый бит (который XMLWriterdo), но обрабатывает только два нужных мне случая (до того, как элементы с аннотацией и до атрибутов с аннотацией) будут оценены.

Частичное решение, которое у меня есть, - это либо обернуть элементы этой конкретной аннотацией в другуюэлемент, но это портит XML и не работает с атрибутами.Другое решение состоит в том, чтобы заменить аннотации на XComment ´ вместо элементов для элементов и атрибутов.Но тогда я должен был бы заменить комментарии позже.Я мог бы пойти с последним решением, но уже могли быть комментарии, которые потенциально могли бы иметь тот же формат, к которому я применяю комментарии.

Пример:

var annoAtt = new XAttribute("Name", "Foo");
annoAtt.AddAnnotation(new Foo());

var doc = new XDocument(
            new XElement("Root",
                new XElement("Some",
                    annoAtt))));

Затем я хочу это каквывод (не действительный XML, но мне это не нужно):

<Root>
   <Some {Something}Name="Foo"/>
</Root>

Я мог бы сделать что-то вроде:

<Root>
   <Some my:Something="Name ..." Name="Foo"/>
</Root>

, но это действительно не то, что я хочу.

Если бы я мог получить начальную позицию элементов и атрибутов, это было бы идеально.Я пытаюсь реализовать это с помощью:

http://blogs.msdn.com/b/mikechampion/archive/2006/09/10/748408.aspx

Ответы [ 2 ]

4 голосов
/ 22 августа 2010

Учитывая, что аннотации являются произвольными объектами, неудивительно, что они не выписаны. Они на самом деле не являются частью модели документа XML - они просто дополнения для LINQ to XML. Что нужно для сохранения в аннотациях? Если это просто строковые данные, вы можете вместо этого создать атрибут (возможно, в своем собственном пространстве имен, чтобы избежать конфликтов). По общему признанию, это может быть сложно, если вы хотите добавить аннотации к текстовым узлам, но вы можете разумно легко добавить их как к элементам, так и к атрибутам. (Имеют два разных типа атрибута, один из которых указывает, к какому атрибуту он относится как к части своих данных.)

Обычно, если вы хотите, чтобы данные сохранялись в представлении XML, они должны быть частью обычной модели документа XML.

0 голосов
/ 22 августа 2010

Проблема решена: -)

С помощью XDocument.Load(reader, LoadOptions.SetLineInfo) я могу получить номер строки и положение в строке с помощью:

var info = (IXmlLineInfo)element;

И материал, который мне нужен, может быть введен с этой информацией

...