2017-08-07 2 views
0

Mein Betriebssystem ist Windows   7 64Bit. Ich brauche die folgenden XML-String zusammen mit interpretiert dynamischen Inhalt in eine XML-Datei (auch die Aufrechterhaltung der Registerkarten Vertiefung) unter Verwendung von VBScript zu schreiben:Schreiben Sie XML-Zeichenfolge direkt in XML-Datei mit VBScript

Dateiname: [Variable1]_[Variable2].xml

<?xml version="1.0"?> 
<config> 
    <modules> 
     <[Variable1]_[Variable2]> 
      <active>true</active> 
      <codePool>[Variable3]</codePool> 
      <version>[Variable4]</version> 
     </[Variable1]_[Variable2]> 
    </modules> 
</config> 

Alles, was ich konnte für die versuchen, unterhalb des Skripts, um verschiedene Tags und Elemente nacheinander zu erstellen.

scriptDir = CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName) 
Set xmlDoc = CreateObject("Msxml2.DOMDocument.3.0") 
Set objRoot = xmlDoc.CreateElement("config") 
xmlDoc.AppendChild objRoot 
Set objRecord = xmlDoc.CreateElement("modules") 
objRoot.AppendChild objRecord 
Set objName = xmlDoc.CreateElement("Mageweb_ShippingFilter") 
objName.Text = "" 
objRecord.AppendChild objName 
Set objDate = xmlDoc.CreateElement("AuditDate") 
objDate.Text = Date 
objRecord.AppendChild objDate 
Set objIntro = xmlDoc.CreateProcessingInstruction("xml", "version='1.0'") 
xmlDoc.InsertBefore objIntro, xmlDoc.ChildNodes(0) 
'For now there is static name of file 
xmlDoc.Save scriptDir & "\Testfile.xml" 

Aber das scheint für möglicherweise große XML-Dateien in Zukunft zu umständlich zu sein, so kann ich nur schreibe die obige XML-Zeichenfolge (mit allen Variablen mit ihren entsprechenden Werten interpretiert) bereits erwähnt, direkt in XML-Datei und dann Geben Sie einen variablen dynamischen Namen mit VBScript?

Antwort

1

Im Allgemeinen sollten XML-Daten mit XML-Tools (DOM-Manipulation, XSLT) verarbeitet werden, genau weil diese Methoden besser skalieren, wenn die Größe/Komplexität des Problems zunimmt.

Aber für spezielle Fälle (z. B. ASCII-Codierung, idiotensichere Kennzeichnung der Ersetzungen) mit einer RegExp Replace-Funktion und einem Wörterbuch lösen eine Templataufgabe effizient (siehe here).

Demo-Code:

Option Explicit 

Function fnRepl(sM, nP, sS) 
    fnRepl = gdX(sM) 
End Function 

Function mkDic(aK, aV) 
    Dim tmp : Set tmp = CreateObject("Scripting.Dictionary") 
    Dim i 
    For i = 0 To UBound(aK) 
     tmp(aK(i)) = aV(i) 
    Next 
    Set mkDic = tmp 
End Function 

Dim gdX : Set gdX = mkDic(_ 
    Split("[Variable1] [Variable2] [Variable3] [Variable4]") _ 
    , Split("abra cada bra sesame") _ 
) 
Dim r : Set r = New RegExp 
r.Global = True 
r.Pattern = "\[[^\]]+\]" 
Dim sT : sT = Join(Array(_ 
     "<?xml version=""1.0""?>" _ 
    , "<config>" _ 
    , " <modules>" _ 
    , " <[Variable1]_[Variable2]>" _ 
    , " <active>true</active>" _ 
    , " <codePool>[Variable3]</codePool>" _ 
    , " <version>[Variable4]</version>" _ 
    , " </[Variable1]_[Variable2]>" _ 
    , " </modules>" _ 
    , "</config>" _ 
    ), vbCrLf) 

WScript.Echo sT 
WScript.Echo "----------" 
WScript.Echo r.Replace(sT, GetRef("fnRepl")) 

Ausgang:

cscript 45553911.vbs 
<?xml version="1.0"?> 
<config> 
<modules> 
    <[Variable1]_[Variable2]> 
    <active>true</active> 
    <codePool>[Variable3]</codePool> 
    <version>[Variable4]</version> 
    </[Variable1]_[Variable2]> 
</modules> 
</config> 
---------- 
<?xml version="1.0"?> 
<config> 
<modules> 
    <abra_cada> 
    <active>true</active> 
    <codePool>bra</codePool> 
    <version>sesame</version> 
    </abra_cada> 
</modules> 
</config> 
0

Sehen Sie, wenn diese

Set xmlDoc = CreateObject("Msxml2.DOMDocument.3.0") 

xmlDoc.LoadXML strXML 'strXML being your xml string 

xmlDoc.Save strPath 'Directory and name of the save location 

hilft Für diese Methode funktioniert, die strXML Variable die Variablen vorher interpretiert haben sollte. Sie können die string-Methoden verwenden, um dies zu erreichen.

P.S. Ich habe dieses Snippet auf ein Telefon geschrieben und könnte einige Fehler haben, aber das sollte einen Weg voraus geben.

+0

Können Sie bitte eine Demo von einigen String-Methoden in Ihrer Antwort hinzufügen, muss ich diese Variablen vor dem Laden von XML im Dokument wirklich analysieren. – VST

Verwandte Themen