2009-12-10 4 views
1

Je ne suis pas un développeur.Existe-t-il un outil pour remplacer automatiquement un groupe de GUID avec ceux générés dynamiquement?

J'ai besoin de pirater un fichier XML pour dupliquer des centaines de ressources auxquelles un GUID est affecté. Existe-t-il un moyen d'analyser le fichier entier, en remplaçant chaque GUID trouvé dans un tag avec un généré dynamiquement?

Fondamentalement, chaque balise UniqueID (mais pas les balises ContentUniqueID) nécessite un nouveau GUID.

<root xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'> 
    <Name>[redacted]</Name> 
    <UniqueId>7a136c33-3ea8-4f99-8f99-bbe411972203</UniqueId> 
    <Enabled>true</Enabled> 
    <Behavior>EmptyOnly</Behavior> 
    <Subscriptions /> 
    <ScheduledFormatTemplates> 
    <ScheduledFormatTemplate> 
     <Name>[redacted]</Name> 
     <UniqueId>1cfaba3e-bfd5-4d2f-a1df-14020ad2f7da</UniqueId> 
     <ContentUniqueId>67c58741-fe1b-4c15-8dc0-8b4c01f6f18f</ContentUniqueId> 
     <ScheduledContents> 
     <ScheduledContent xsi:type="SFTR"> 
      <Name>[redacted]</Name> 
      <UniqueId>b4a60646-b62b-43e7-b2a2-7d37875ab33f</UniqueId> 
      <ContentUniqueId>ba634a97-9faf-4bfa-a9b4-d8a2475b82e6</ContentUniqueId> 
      <ScheduledContents> 
      <ScheduledContent> 
       <Name>[redacted]</Name> 
       <UniqueId>6f8e6e6c-1f94-4caa-8730-6859448138eb</UniqueId> 
       <ContentUniqueId>938b0a24-4043-4a16-bc2d-25dbdb21a659</ContentUniqueId> 
      </ScheduledContent> 
      </ScheduledContents> 
     </ScheduledContent> 
     </ScheduledContents> 
    </ScheduledFormatTemplate> 
    </ScheduledFormatTemplates> 
</root> 
+0

bien oui, quels outils/langue regardez-vous à l'aide? – brendan

Répondre

1

Il est un outil basé sur le Web qui fait cela here

+0

Nevermind, je ne fais pas cela cela fonctionnera pour vous. Je remplace TOUS les Guids qu'il trouve. – BigJoe714

2

Je ne sais pas d'un outil comme ça, mais un développeur doit être en mesure de produire un script Powershell, ou un script Perl, qui fait cela en quelques 10-15 minutes.

Si vous postez l'exemple du fichier XML, je parie que quelqu'un pourrait même écrire du code de travail. Si vous définissez votre Q comme un défi, vous aurez plus de personnes à répondre. Selon la complexité du fichier XML, il peut s'agir de 10 lignes de script.


S'il y a d'autres exigences, comme - si vous voulez que les nouveaux GUIDs à ​​tous être choisi parmi une gamme particulière - qui sera toujours possible et simple, mais vous aurez besoin de dire à toutes ces exigences.


## 
## ReplaceGuids.ps1 
## 
## Reads an XML document, and emits an output doc. The output replaces 
## the Text value of each node in the input with LocalName="UniqueId", with 
## a new Guid. 
## 
## Thu, 10 Dec 2009 12:06 
## 


# Create the XmlReader 
$xr = [system.Xml.XmlReader]::Create("c:\data\Doug.xml") 
# Create the XmlWriter 
$sw = New-Object System.IO.StringWriter 
$xw = New-Object System.Xml.XmlTextWriter $sw 
$xw.Formatting = "indented" 
$xw.Indentation = 2 

$elementName = "" 

# loop over each element in XmlReader 
while ($true) { 
    if ($xr.Read() -eq $false) { break; } 
    switch ($xr.NodeType.ToString()) 
    { 
    "Element" { 
     $xw.WriteStartElement($xr.Name) 
     $xw.WriteAttributes($xr, $false) 
     if ($xr.IsEmptyElement) { $xw.WriteEndElement(); $elementName = ""; } 
     else {$elementName = $xr.LocalName; } 
    } 

    "EndElement" { 
     $xw.WriteEndElement() 
     $elementName = "" 
    } 

    "Text" { 
     if ($elementName -eq "UniqueId") { 
     $guid = [System.Guid]::NewGuid() 
     $xw.WriteValue($guid.ToString()) 
     } else { 
     $xw.WriteValue($xr.Value) 
     } 
    } 
    } 
} 

$xr.Close() 
$xw.Flush() 
$sw.Flush() 
Write-Output $sw.ToString() 
+0

Pas d'autres exigences vraiment. Ils ont juste besoin d'être distincts les uns des autres. Je pensais que c'était peut-être quelque chose que les gens devaient faire fréquemment. –

+0

Je vais poster un exemple de code. Essentiellement, chaque balise dans le document doit être remplacée par un nouveau GUID distinct. –

+0

Je parle Sysadmin PowerShell mais pas Developer PowerShell, donc si c'est une bonne façon d'accomplir cela, je serai capable de suivre ce que vous me dites. –

Questions connexes