Невозможно создать новый XDocument с пространством имен с нуля
Мы пытаемся создать новый XML-документ с приведенным ниже содержимым, используя XDocument, не запрашивая существующий:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<idPkg:Story xmlns:idPkg="http://ns.adobe.com/AdobeInDesign/idml/1.0/packaging" DOMVersion="8.0">
<Story Self="xyz">
<ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/$ID/NormalParagraphStyle">
<CharacterStyleRange AppliedCharacterStyle="CharacterStyle/$ID/[No character style]">
<Content>Lorem ipsum dolor sit amet, consectetur adipiscing elit. In ut ipsum et libero aliquam venenatis. Vestibulum molestie neque id leo sodales porta. Proin ullamcorper molestie mi a commodo. Aenean mattis tincidunt purus id sagittis. Nam bibendum metus est, id condimentum nisi tristique posuere. Sed interdum sollicitudin tincidunt. Fusce volutpat neque turpis, eget porttitor mauris ultricies quis. Morbi posuere ligula lobortis orci dictum lobortis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. In ut ipsum et libero aliquam venenatis. Vestibulum molestie neque id leo sodales porta. Proin ullamcorper molestie mi a commodo. Aenean mattis tincidunt purus id sagittis. Nam bibendum metus est, id condimentum nisi tristique posuere. Sed interdum sollicitudin tincidunt. Fusce volutpat neque turpis, eget porttitor mauris ultricies quis. Morbi posuere ligula lobortis orci dictum lobortis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. In ut ipsum et libero aliquam venenatis. Vestibulum molestie neque id leo sodales porta. Proin ullamcorper molestie mi a commodo. Aenean mattis tincidunt purus id sagittis. Nam bibendum metus est, id condimentum nisi tristique posuere. Sed interdum sollicitudin tincidunt. Fusce volutpat neque turpis, eget porttitor mauris ultricies quis. Morbi posuere ligula lobortis orci dictum lobortis.</Content>
</CharacterStyleRange>
</ParagraphStyleRange>
</Story>
</idPkg:Story>
Мы попробовали следующий код:
Xdocument = new XDocument
{
Declaration = new XDeclaration("1.0", "UTF-8", "yes"),
};
XNamespace schemaLocation = XNamespace.Get("http://www.w3.org/2001/XMLSchema-datatypes");
XNamespace idPkg = "http://ns.adobe.com/AdobeInDesign/idml/1.0/packaging";
Xdocument.Add(new XElement(idPkg + "Story",
new XAttribute("xmlns" + "idPkg", "http://ns.adobe.com/AdobeInDesign/idml/1.0/packaging"),
new XAttribute("DOMVersion", "8.0")),
new XElement(idPkg + "Story"),
new XAttribute("Self", "xyz" + EnumHelper.GetDescription(section)));
Когда мы запускаем метод, он выдает ошибки new XElement(idPkg + "Story"),
и мы получаем следующее сообщение об ошибке: This operation would create an incorrectly structured document.
Мы рассмотрели следующий вопрос: Создание XDocument с пространством имен xsi:schemaLocation
1 ответ
Решение
Ваш код попробуйте добавить второй элемент XDocument
, которые нарушают спецификацию XML и создают исключение. Лично я предпочитаю писать код создания XML как отдельный оператор с отступом, который напоминает структуру XML:
XNamespace idPkg="http://ns.adobe.com/AdobeInDesign/idml/1.0/packaging";
XDocument document=new XDocument(
new XDeclaration("1.0","UTF-8","yes"),
new XElement(idPkg+"Story",
new XAttribute(XNamespace.Xmlns+"idPkg",idPkg),
new XAttribute("DOMVersion","8.0"),
new XElement("Story",
new XAttribute("Self","zxc"),
new XElement("ParagraphStyleRange",
new XAttribute("AppliedParagraphStyle","ParagraphStyle/$ID/NormalParagraphStyle"),
new XElement("CharacterStyleRange",
new XAttribute("AppliedCharacterStyle","CharacterStyle/$ID/[No character style]"),
new XElement("Content","Lorem ipsum dolor sit amet, consectetur adipiscing elit. In ut ipsum et libero aliquam venenatis. Vestibulum molestie neque id leo sodales porta. Proin ullamcorper molestie mi a commodo. Aenean mattis tincidunt purus id sagittis. Nam bibendum metus est, id condimentum nisi tristique posuere. Sed interdum sollicitudin tincidunt. Fusce volutpat neque turpis, eget porttitor mauris ultricies quis. Morbi posuere ligula lobortis orci dictum lobortis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. In ut ipsum et libero aliquam venenatis. Vestibulum molestie neque id leo sodales porta. Proin ullamcorper molestie mi a commodo. Aenean mattis tincidunt purus id sagittis. Nam bibendum metus est, id condimentum nisi tristique posuere. Sed interdum sollicitudin tincidunt. Fusce volutpat neque turpis, eget porttitor mauris ultricies quis. Morbi posuere ligula lobortis orci dictum lobortis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. In ut ipsum et libero aliquam venenatis. Vestibulum molestie neque id leo sodales porta. Proin ullamcorper molestie mi a commodo. Aenean mattis tincidunt purus id sagittis. Nam bibendum metus est, id condimentum nisi tristique posuere. Sed interdum sollicitudin tincidunt. Fusce volutpat neque turpis, eget porttitor mauris ultricies quis. Morbi posuere ligula lobortis orci dictum lobortis.")
)
)
)
)
);
Также вы должны использовать XNamespace.Xmlns+"idPkg"
вместо "xmlns"+"idPkg"
,