无法从头开始使用命名空间创建新的 XDocument

Unable to Create New XDocument with namespace from scratch

我们正在尝试使用 XDocument 创建一个包含以下内容的新 XML 文档,而不查询现有文档:

<?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.

我们查看了以下问题: Creating XDocument with xsi:schemaLocation namespace

您的代码尝试向 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"