4

私はすでにこの問題の理由を見つけているので、これは実際には問題ではありませんOpenXml本体から子孫を取得する

子孫は、このコードを使用して取得されます。

using System.IO;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
namespace Testolini
{
    class Program
    {
        static void Main(string[] args)
        {
            var filename = Path.GetTempFileName();
            var word = WordprocessingDocument.Create(filename, DocumentFormat.OpenXml.WordprocessingDocumentType.Document);
            word.AddMainDocumentPart();
            word.MainDocumentPart.Document = new Document(
                                                new Body(
                                                    new Paragraph(
                                                        new Run(
                                                            new Paragraph(
                                                                new Run(
                                                                    new Text("test1"))),
                                                            new Paragraph(
                                                                new Run(
                                                                    new Text("test2"))),
                                                            new Paragraph(
                                                                new Run(
                                                                    new Text("test3")))))));
            word.Close();

            using (var memorystream = new MemoryStream(File.ReadAllBytes(filename)))
            {
                var word2 = WordprocessingDocument.Open(memorystream, true);

                var descendants = word2.MainDocumentPart.Document.Body.Descendants();

                word.Close();

            }
        }
    }
}

同じ問題が発生した場合。XMLファイルがECMA標準で検証されていないことが原因である可能性があります。私の場合、問題は段落がネストされていることでした。

bytearrayとmemorystreamを使用してドキュメントを開くと、問題が発生します。要素が検証されているようで、検証が失敗した場合はOpenXmlUnknownElementになります。

誰かがより良い説明とおそらくこの問題のより正確な理由を持っているなら、私はそれについてもっと学びたいです。

4

2 に答える 2

5

ARunに別のを含めることはできませんParagraph

Run:の有効な子要素のリストは次のとおりです。

annotationRef(コメント情報ブロック)
br(ブレーク)
commentReference(コメントコンテンツリファレンスマーク)
contentPart(コンテンツパート)
continuationSeparator(継続セパレーターマーク)
cr(キャリッジリターン)
dayLong(日付ブロック-長い日形式)
dayShort(日付ブロック-短い日形式)
delInstrText(削除されたフィールドコード)
delText(削除されたテキスト)
drawing(DrawingML Object)
endnoteRef(Endnote Reference Mark)
endnoteReference(Endnote Reference)
fldChar(Complex Field Character)
footnoteRef(Footnote Reference Mark)
footnoteReference(Footnote Reference)
instrText(Field Code)
lastRenderedPageBreak(最後に計算されたページ区切りの位置)
monthLong(日付ブロック-長い月の形式)
monthShort(日付ブロック-短い月の形式)
noBreakHyphen(非区切りハイフン文字)
オブジェクト(埋め込みオブジェクト)
pgNum(ページ番号ブロック)
ptab(絶対位置タブ文字)
rPr(実行プロパティ)
ruby(電話ガイド)
区切り文字(脚注/文末脚記号区切り文字マーク)
softHyphen(オプションのハイフン文字)
sym(記号文字)
t(テキスト)
タブ(タブ文字)
yearLong(日付ブロック-長い年の形式)
yearShort (日付ブロック-短い年の形式)

MSDNから取得。

なぜ「ネストされた」段落が必要なのですか?

于 2012-12-05T14:54:21.640 に答える
3

ドキュメントが無効な状態になっているようです。これは、そのように関連付けられるべきではない親の下に子が含まれるようにドキュメントを変更したときに発生すると思います。

これは役立つかもしれません:http://msdn.microsoft.com/en-us/library/office/bb497334.aspx

于 2012-12-03T13:55:43.123 に答える