XML bestand aanpassen met Visual basic mogelijk

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • matje12345
  • Registratie: Juli 2018
  • Laatst online: 06-05 09:12
Beste,

Een vraag voor de kenners.
Ik heb een probleem met een gegenereerd .xml UBL bestand.
Hier moet een regel in gewijzigd worden en dit gaat helaas niet met de originele software die het bestand heeft gegeneerd.
Hopelijk weet iemand hier of het onderstaande mogelijk is met VB (ik kan dit zelf een beetje maar niet genoeg voor deze casus).

Zo gaat het nu:
1. Extern programma genereert een XML bestand
2. Er wordt een nieuwe e-mail in Outlook geopend met als bijlage dit XML bestand (de email moet daarna wel 'handmatig' worden verzonden).

Dit zou dus aangepast moeten worden:
3. In dit XML bestand moet alleen een bepaalde (vaste) regel worden vervangen door een andere (vaste) regel. Het XML bestand moet verder ongewijzigd blijven en de layout dient ook hetzelfde te blijven (met inspringen etc). Na de wijziging moet het gewijzigde bestand als bijlage worden opgeslagen bij de email waarna de email handmatig verzonden kan worden.

Mijn vraag nu:
Is het mogelijk om in het lint van Outlook een knop toe te voegen met hieraan een script die het XML bestand dat bij de email zit opent, de regel vervangt door de andere regel en daarna de wijziging weer opslaat (met behoud van de structuur dus van de XML) zodat daarna het gewijzigde bestand verzonden kan worden als bijlage?

Als ik dit handmatig uitvoer (bestand openen, aanpassen, opslaan) werkt dit wel, maar dat is alleen best wat werk, dus hopelijk kan dit ook geautomatiseerd worden.

*snip* Werving (ook niet als je 't "casual laat vallen" ;) ) is hier niet de bedoeling :>

[ Voor 4% gewijzigd door RobIII op 30-01-2025 15:49 ]

Alle reacties


Acties:
  • +1 Henk 'm!

  • GarBaGe
  • Registratie: December 1999
  • Laatst online: 30-05 12:32
Het heeft een hoog "hobby de bobby" gehalte, maar het is mogelijk.
Een XML bestand is "slechts" een tekst bestand en kan met eenvoudige search-and-replace wel gewijzigd worden.

Ryzen9 5900X; 16GB DDR4-3200 ; RTX-4080S ; 7TB SSD


Acties:
  • +1 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Wat @GarBaGe zegt klopt - in essentie. Maar ga alsjeblieft een XML bestand niet als een tekstbestand behandelen. Gebruik gewoon de libraries, classes die daarvoor bedoeld zijn.

Ik neem aan dat je het over VBA (Visual Basic for Applications) hebt, niet VB (Visual Basic "classic") of VB.Net. In elk is het mogelijk met XML te werken, maar het zal onderling wel enigszins verschillen. Even een willekeurig google resultaat: XML in VBA. Dat zou je een heel eind op weg moeten helpen.

We willen je best in de juiste richting wijzen, maar we gaan het hier niet voor je voorkauwen. Give a man a fish enzo ;) Als je ons wat regels code geeft en toont wat je hebt geprobeerd komen we er vast uit.

[ Voor 17% gewijzigd door RobIII op 30-01-2025 15:53 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • matje12345
  • Registratie: Juli 2018
  • Laatst online: 06-05 09:12
Dank voor de reacties. Het klopt dat het geen 'nette' oplossing is, maar de software wordt niet aangepast en dit is bedoeld als tijdelijke oplossing tot de overstap naar een nieuw softwarepakket.
Het klopt inderdaad dat het over VBA gaat.

[ Voor 10% gewijzigd door matje12345 op 30-01-2025 15:54 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Wanneer je het als tekst behandelt gaat het geheid mis zodra er "gekke tekens" als < of > of " of diakrieten etc gebruikt worden. Dus ik raad de "tekst vervangen" methode af tenzij het altijd dezelfde vaste tekst is. Komt er gebruikersinvoer oid in de XML dan kun je er gif op innemen dat het mis gaat.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • mrmrmr
  • Registratie: April 2007
  • Niet online
Je kan het beste van het Outlook idee afstappen en het bericht vanuit een traditioneel script verzenden. Dat bestand kun je tevoren aanpassen met een zoek-en-vervang tool. GSAR is een voorbeeld, maar er zijn ook geporteerde tools vanuit Linux, zoals sed. Kijk hiervoor naar Cygwin, dat is een port van veel Linux tools naar Windows.

Er zijn talloze tools om vanuit de command line berichten te versturen. Met openssl (cygwin) kun je ervoor zorgen dat er transportencryptie is tussen de client en de mail server.

Let op dat je in XML bestanden voor 5 karakters een escape moet gebruiken.

Acties:
  • 0 Henk 'm!

  • DVX73
  • Registratie: November 2012
  • Laatst online: 12:11
Technisch kan het, echter ben ik wel benieuwd wat je aanpas.

Een adresregel of verwijzing naar algemene voorwaarden is niet heel spannend.

Maar een BTW nummer wijzigen kan resulteren in dat de door de software gegeneerde BTW aangiften niet meer kloppen. Plus dat dit heel veel vragen kan opleveren bij een bezoek door de belastingdienst.

Een bankrekeningnummer aanpassen is natuurlijk ook een no go.

Tenslotte zul je moeten waarboprgen dat de aangepaste bestanden minimaal 10 jaar (na afloop van het boekjaar) bewaard worden (fiscale wetgeving).

Acties:
  • +1 Henk 'm!

  • Boss
  • Registratie: September 1999
  • Laatst online: 15:38

Boss

+1 Overgewaardeerd

Dit zijn dingen waar je ChatGTP heel goed voor aan het werk kan zetten. Bijvoorbeeld deze vraag:
Write a Visual Basic program that opens an xml file and replaces the element `<old_value>oude waarde</old value>` with <new_value>nieuwe waarde</new_value> and then send the file through Outlook.

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


Acties:
  • 0 Henk 'm!

  • matje12345
  • Registratie: Juli 2018
  • Laatst online: 06-05 09:12
Dank voor de antwoorden, het is verder helemaal geen bijzondere aanpassing. In ieder XML bestand is de enige regel die aangepast moet worden:

<cbc:IdentificationCode>NL</cbc:IdentificationCode>
naar
<cbc:IdentificationCode>DE</cbc:IdentificationCode>

Dat lijkt toch niet al te ingewikkeld.

Acties:
  • +1 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Als dat constant is, ja, dan kom je weg met een simpele text-replace. Blijft altijd een slecht idee, maar in dit geval, mwa... you'll live zolang je niet nog meer / andere dingen gaat doen ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • RaZ
  • Registratie: November 2000
  • Niet online

RaZ

Funky Cold Medina

matje12345 schreef op donderdag 30 januari 2025 @ 19:15:
Dank voor de antwoorden, het is verder helemaal geen bijzondere aanpassing. In ieder XML bestand is de enige regel die aangepast moet worden:

<cbc:IdentificationCode>NL</cbc:IdentificationCode>
naar
<cbc:IdentificationCode>DE</cbc:IdentificationCode>

Dat lijkt toch niet al te ingewikkeld.
Kijk hier eens: https://learn.microsoft.c...ace-help/replace-function

Ey!! Macarena \o/


Acties:
  • 0 Henk 'm!

  • Deshmir
  • Registratie: Februari 2012
  • Laatst online: 19:19
Ik heb dit van de week met een powershell script gemaakt via chatgpt, ben je in 5 min klaar.
Inlezen als xml, vervangen van de variable, opslaan als xml.

Waarom perse VB?

[ Voor 21% gewijzigd door Deshmir op 30-01-2025 19:38 ]


Acties:
  • 0 Henk 'm!

  • matje12345
  • Registratie: Juli 2018
  • Laatst online: 06-05 09:12
Hoe powershell werkt geen idee, ik weet alleen iets van VBA.
Die chatgpt tip is wel top zeg, zelf helemaal niet aan gedacht. Ben al een eindje gevorderd.

Acties:
  • 0 Henk 'm!

  • im_ik
  • Registratie: November 2000
  • Laatst online: 15-05 20:38

im_ik

dat ben ik dus

De kenners met XML, dat is helaas een ondergeschoven kennis gebied geworden.
Een waarde aanpassen in een XML bestandt wordt ook wel een transformatie genoemt en
daar heeft de W3C een special dialect voor gemaakt.
Dit heet XSLT (Extensible Stylesheet Language Transformations) en zit in de standaard
gereedschaps koffer van visual basic;
https://learn.microsoft.c...desktop/ms762785(v=vs.85)

Met XSLT kan je gemakkelijk en correct de XML omzetten naar XML of ander TEXT formaat.
Een enkele waarde aanpassen die niet heel gebruikelijk maar is zeker mogelijk, met iets als dit;
code:
1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="IdentificationCode/text()[.='NL']">DE</xsl:template>
</xsl:stylesheet>


Dit is een zonder XML namespace voorbeeld. (en dient dus aangepast te worden)
XSLT is beter dan een regex replace all hack als ie een echte programmeer taal hebt.

Atari Terminator AI - LegoBlockX3 = ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᣳᣝᐤᣜᣳ.ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ.T008ᖟ


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Je hoeft écht geen XSLT te gebruiken om een XML bestand aan te passen. Het is één van de mogelijkheden. Onder VB kun je ook een DOM document gebruiken en zelfs icm XPath als het moet.

Maar we waren er onderhand wel al uit dat TS - in dit zéé specifieke geval - ook prima weg kwam / komt met een simpele string replace. Ondanks dat dat in veruit de meeste gevallen geen goed plan is.

[ Voor 63% gewijzigd door RobIII op 07-02-2025 16:07 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1