Skip to content

Commit

Permalink
simplified handling of xml namespaces for reading documents
Browse files Browse the repository at this point in the history
makes code more robust
  • Loading branch information
stephanstapel committed Jul 4, 2024
1 parent a656da4 commit bd15684
Show file tree
Hide file tree
Showing 4 changed files with 627 additions and 621 deletions.
19 changes: 19 additions & 0 deletions ZUGFeRD/IInvoiceDescriptorReader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,25 @@ public bool IsReadableByThisReaderVersion(string filename)
} // !IsReadableByThisReaderVersion()


protected XmlNamespaceManager _GenerateNamespaceManagerFromNode(XmlNode node)
{
XmlNamespaceManager nsmgr = new XmlNamespaceManager(node.OwnerDocument.NameTable);
foreach (XmlAttribute attr in node.Attributes)
{
if (attr.Prefix == "xmlns")
{
nsmgr.AddNamespace(attr.LocalName, attr.Value);
}
else if (attr.Name == "xmlns")
{
nsmgr.AddNamespace(string.Empty, attr.Value);
}
}

return nsmgr;
} // !_GenerateNamespaceManagerFromNode()


protected static bool _nodeAsBool(XmlNode node, string xpath, XmlNamespaceManager nsmgr = null, bool defaultValue = true)
{
if (node == null)
Expand Down
5 changes: 1 addition & 4 deletions ZUGFeRD/InvoiceDescriptor1Reader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,7 @@ public override InvoiceDescriptor Load(Stream stream)

XmlDocument doc = new XmlDocument();
doc.Load(stream);
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.DocumentElement.OwnerDocument.NameTable);
nsmgr.AddNamespace("rsm", "urn:ferd:CrossIndustryDocument:invoice:1p0");
nsmgr.AddNamespace("ram", "urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:12");
nsmgr.AddNamespace("udt", "urn:un:unece:uncefact:data:standard:UnqualifiedDataType:15");
XmlNamespaceManager nsmgr = _GenerateNamespaceManagerFromNode(doc.DocumentElement);

InvoiceDescriptor retval = new InvoiceDescriptor
{
Expand Down
7 changes: 1 addition & 6 deletions ZUGFeRD/InvoiceDescriptor20Reader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,12 +46,7 @@ public override InvoiceDescriptor Load(Stream stream)

XmlDocument doc = new XmlDocument();
doc.Load(stream);
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.DocumentElement.OwnerDocument.NameTable);
nsmgr.AddNamespace("qdt", "urn:un:unece:uncefact:data:standard:QualifiedDataType:100");
nsmgr.AddNamespace("a", "urn:un:unece:uncefact:data:standard:QualifiedDataType:100");
nsmgr.AddNamespace("rsm", "urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100");
nsmgr.AddNamespace("ram", "urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100");
nsmgr.AddNamespace("udt", "urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100");
XmlNamespaceManager nsmgr = _GenerateNamespaceManagerFromNode(doc.DocumentElement);

InvoiceDescriptor retval = new InvoiceDescriptor
{
Expand Down
Loading

0 comments on commit bd15684

Please sign in to comment.