Skip to content

Commit e911447

Browse files
committed
Merge remote-tracking branch 'upstream/main' into issue-816
2 parents 2d5dd09 + a073d05 commit e911447

File tree

2 files changed

+50
-1
lines changed

2 files changed

+50
-1
lines changed

src/DocumentFormat.OpenXml.Framework/OpenXmlPartReader.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -765,7 +765,7 @@ private OpenXmlElement CreateElement(in OpenXmlQualifiedName qname)
765765
}
766766

767767
// return unknown element instead of throw exception.
768-
return new OpenXmlUnknownElement();
768+
return new OpenXmlUnknownElement(_xmlReader.Prefix, _xmlReader.LocalName, _xmlReader.NamespaceURI);
769769
}
770770

771771
private void LoadAttributes()

test/DocumentFormat.OpenXml.Packaging.Tests/OpenXmlPartReaderTests.cs

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,53 @@ public void ExtractsInfoFromStream(string xml, string? encoding, bool? standalon
4747
// Ensure the part reader did not dispose the stream when it is disposed
4848
Assert.True(stream.CanRead);
4949
}
50+
51+
[Fact]
52+
public void CreateElement()
53+
{
54+
// Arrange
55+
var stream = new MemoryStream();
56+
ExtendedPart extPart;
57+
const string xmlContent = """
58+
<?xml version='1.0' encoding='utf-8' standalone='yes'?>
59+
<a:root xmlns:a="http://www.tests.com/">
60+
<a:child>Test</a:child>
61+
<a:child>Test2</a:child>
62+
</a:root>
63+
""";
64+
const string nsUri = "http://www.tests.com/";
65+
const string prefix = "a";
66+
const string localName = "root";
67+
{
68+
using (var package = SpreadsheetDocument.Create(stream, SpreadsheetDocumentType.Workbook))
69+
{
70+
var workbook = package.AddWorkbookPart();
71+
extPart = workbook.AddExtendedPart(nsUri, "application/xml", ".xml");
72+
73+
// Write some custom elements which are unknown to the OpenXmlPartReader
74+
using (var writer = new StreamWriter(extPart.GetStream(FileMode.Create)))
75+
{
76+
writer.Write(xmlContent);
77+
}
78+
79+
OpenXmlReader reader = OpenXmlReader.Create(extPart);
80+
81+
// Assert
82+
while (reader.Read())
83+
{
84+
Assert.Equal(prefix, reader.Prefix);
85+
Assert.Equal(nsUri, reader.NamespaceUri);
86+
87+
if (!reader.LocalName.Equals(localName))
88+
{
89+
Assert.Equal("child", reader.LocalName);
90+
}
91+
else
92+
{
93+
Assert.Equal(localName, reader.LocalName);
94+
}
95+
}
96+
}
97+
}
98+
}
5099
}

0 commit comments

Comments
 (0)