这是不是一个真正的问题,因为我已经发现了这个问题为什么我得到一个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