Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

XMLInvoice: gültige namespaces aus der xml holen ... #419

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

wernerhahn
Copy link
Contributor

Die namespaces CrossIndustryInvoice, ReusableAggregateBusinessInformationEntity, UnqualifiedDataType können beliebig sein und sind von ZUGfERD nicht festgelegt. Deswegen werden die ns jetzt vorher ausgelesen.

Ich hatte seit Herbst Probleme mit den ZUGfERD Rechnungen von MEMO. Und hatte die mal angeschrieben, da es zuvor ging. Hier die Antwort

Hallo Herr Hahn,
ich gehe Ihre Anliegen mal Punkt für Punkt durch:

„Bei meinem Kunden xxx funktioniert seit Herbst nicht mehr der ZUGfERD Import in das Warenwirtschaftssystem kivitendo.“
    Ich habe einen kurzen Blick auf den Quellcode von kivitendo und dessen Online-Demo geworfen. Die vollständige Fehlermeldung lautet: Fehler bei //ram:DuePayableAmount :XPath error : Undefined namespace prefix
    Das (Und der Code in CrossIndustryInvoice.pm) deuten darauf hin, dass diese Software feste Namespace-Präfixe erwartet. Feste Namespace-Präfixe zu erwarten, ist schlicht nicht ZUGFeRD-kompatibel, weil Namespace-Präfixe im Ermessen des Erstellers liegen. Siehe dazu meinen Abschnitt zu XML-Namespace-Präfixes am Ende. 
„Der Onlinevalidator zeigt https://erechnungs-validator.de/ ‚Ungültige Anfrage‘ “
    Ich bekomme da ein etwas anderes Ergebnis („Keine gültige ZUGFeRD-Datei.“). Leider findet man im Internet immer mal Validatoren, die nicht korrekt validieren, entweder, weil sie noch nicht auf neuere ZUGFeRD-Versionen ausgelegt sind, oder, weil sie Fehler wie den mit den Namespace-Präfixen machen.
    Als Gegenbeispiel: Der Validator des Mustang-Projekts (https://www.mustangproject.org/kommandozeile/?lang=de#validate) validiert unsere Rechnungen einwandfrei

Ein kleiner Exkurs zu XML Namespaces und Präfixes: XML-Namespace-Präfixe können vom Ersteller des XML beliebig gewählt werden. Sie tragen grundsätzlich keine spezielle Bedeutung. Sie werden über eine 'xmlns'-Deklaration einer URI zugeordnet und diese URI ist das, was übereinstimmen muss.
Z.B. sind diese beiden XML-Dokumente inhaltlich absolut gleich:

<h:dokument xmlns:h="http://www.example.org/pfad/">
  <h:element>Text</h:element>
</h:dokument>
<ns1:dokument xmlns:ns1="http://www.example.org/pfad/">
  <ns1:element>Text</ns1:element>
</ns1:dokument>

Dies ist in https://www.w3.org/TR/REC-xml-names/ festgelegt.
Für Perl gibt es dafür ein entsprechendes Tutorial: http://grantm.github.io/perl-libxml-by-example/namespaces.html. Offenbar ist wichtig, einen XPathContext zu verwenden und die Namespace-Präfixe, die auf Seiten des XPath-Ausdrucks verwendet werden, mit den offiziellen URIs per registerNs zu verknüpfen. In SL/ZUGFeRD.pm z.B. wird das bereits gemacht.

Die namespaces CrossIndustryInvoice, ReusableAggregateBusinessInformationEntity, UnqualifiedDataType
können beliebig sein und sind von ZUGfERD nicht festgelegt.
Deswegen werden die ns jetzt vorher ausgelesen.
@wernerhahn wernerhahn requested a review from sschoeling January 11, 2025 17:41
@gftyftffgvgh
Copy link

Всем привет,все очень нравится

@gftyftffgvgh
Copy link

Всем привет все очень нравится

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants