這是不是一個真正的問題,因爲我已經發現了這個問題爲什麼我得到一個OpenXmlUnknownElement?
後代都使用此代碼檢索的原因。
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 fil不符合ECMA標準。 在我的情況下,問題是我嵌套了段落。
當我使用bytearray和memorystream打開文檔時出現問題。它看起來像元素進行了驗證,如果驗證失敗,它變成了OpenXmlUnknownElement。
如果任何人有更好的解釋,也許這個問題更準確的原因,我想更多地瞭解它。
我認爲這發生在您更改文檔以使其包含父母下方不應該與該父母關聯的子女時發生。這是您的解決方案中可能的情況嗎? – Maarten
是的。在我的情況下,你不能在運行(/段落)中有段落。我試圖找到一種方法來執行驗證,以便不會發生這種情況。 –
這可能有所幫助:http://msdn.microsoft.com/en-us/library/office/bb497334.aspx – Maarten