Actuellement, j'ai dû modifier un fichier XML à partir de XML version 1.1 à 1.0 pour pouvoir lire le fichier. Ce faisant, j'ai été capable de lire le fichier XML et de tirer les informations que je voulais de côté du fichier. Ce faisant, cependant, a provoqué la lancée des exceptions suivantes par PowerShell.
- Impossible de convertir la valeur "System.Object []" en tapez "System.xml.xmldocument". Erreur: "Le personnage"
- Vous ne pouvez pas appeler une méthode sur une expression nominale null. p> blockquote>
Voici mon code: P>
<?xml version='1.1' encoding='UTF-8'?> <build> <actions> <hudson.model.CauseAction> <causeBag class="linked-hash-map"> <entry> <hudson.triggers.TimerTrigger_-TimerTriggerCause/> <int>1</int> </entry> </causeBag> </hudson.model.CauseAction> <hudson.model.ParametersAction> <safeParameters class="sorted-set"/> <parameters> <hudson.model.StringParameterValue> <name>env_webdep</name> <description></description> <value>https://---</value> </hudson.model.StringParameterValue> <hudson.model.StringParameterValue> <name>env_webdep</name> <description></description> <value>"Default Web Site\QA505"</value> </hudson.model.StringParameterValue> <hudson.model.StringParameterValue> <name>env_WEBMSDeployServiceURL</name> <description></description> <value>https://---</value> </hudson.model.StringParameterValue> <hudson.model.StringParameterValue> <name>env_WS5MSDeployServiceURL</name> <description></description> <value>https://---</value> </hudson.model.StringParameterValue> <hudson.model.StringParameterValue> <name>env_webdep</name> <description></description> <value>"Default Web Site\Test"</value> </hudson.model.StringParameterValue> <hudson.model.StringParameterValue> <name>env_webdep</name> <description></description> <value>https://---</value> </hudson.model.StringParameterValue> <hudson.model.StringParameterValue> <name>system_MinorVersion</name> <description></description> <value>2</value> </hudson.model.StringParameterValue> </parameters> </hudson.model.ParametersAction> <jenkins.metrics.impl.TimeInQueueAction plugin="metrics@4.0.2.4"> <queuingDurationMillis>28</queuingDurationMillis> <blockedDurationMillis>0</blockedDurationMillis> <buildableDurationMillis>16</buildableDurationMillis> <waitingDurationMillis>4</waitingDurationMillis> </jenkins.metrics.impl.TimeInQueueAction> <hudson.plugins.tfs.model.WorkspaceConfiguration plugin="tfs@5.142.0"> <workspaceName>Hudson-V5.0.5-MASTER</workspaceName> <workfolder>.</workfolder> <projectPath>$/Test/Dev</projectPath> <serverUrl>http://---</serverUrl> <workspaceExists>true</workspaceExists> <cloakedPaths class="list"/> </hudson.plugins.tfs.model.WorkspaceConfiguration> <hudson.plugins.tfs.TFSRevisionState plugin="tfs@5.142.0"> <changesetVersion>15919</changesetVersion> <projectPath>$/Warehouse/Development/v5.0.5/Web/eOPF</projectPath> </hudson.plugins.tfs.TFSRevisionState> <com.cloudbees.jenkins.plugins.bitbucket.FirstCheckoutCompletedInvisibleAction plugin="cloudbees-bitbucket-branch-source@2.4.4"/> <hudson.plugins.sonar.AbstractMsBuildSQRunner_-SonarQubeScannerMsBuildParams plugin="sonar@2.8.1"> <scannerName></scannerName> <sqServerName>Sonar</sqServerName> </hudson.plugins.sonar.AbstractMsBuildSQRunner_-SonarQubeScannerMsBuildParams> <hudson.plugins.sonar.action.SonarAnalysisAction plugin="sonar@2.8.1"> <installationName>Sonar</installationName> <ceTaskId>---</ceTaskId> <url>http://---</url> <serverUrl>http://---</serverUrl> <isNew>true</isNew> <isSkipped>false</isSkipped> </hudson.plugins.sonar.action.SonarAnalysisAction> <com.sonyericsson.rebuild.RebuildAction plugin="rebuild@1.30"/> <hudson.plugins.sonar.action.SonarCacheAction plugin="sonar@2.8.1"> <infoByTaskId> <entry> <string>AWyNM5URegtpdeQmm-hw</string> <hudson.plugins.sonar.client.ProjectInformation> <created>1565737138064</created> <name>web001</name> <url>http://---</url> <status>ERROR</status> <ceStatus>success</ceStatus> <ceUrl>http://---</ceUrl> </hudson.plugins.sonar.client.ProjectInformation> </entry> </infoByTaskId> <lastRequest>55555</lastRequest> <lastProjInfo> <hudson.plugins.sonar.client.ProjectInformation reference="../../infoByTaskId/entry/hudson.plugins.sonar.client.ProjectInformation"/> </lastProjInfo> </hudson.plugins.sonar.action.SonarCacheAction> </actions> <queueId>001</queueId> <timestamp>1565736843074</timestamp> <startTime>1565736843120</startTime> <result>SUCCESS</result> <duration>294903</duration> <charset>windows-1252</charset> <keepLog>false</keepLog> <builtOn></builtOn> <workspace>C:\Jenkins\workspace\test</workspace> <hudsonVersion>2.173</hudsonVersion> <scm class="hudson.plugins.tfs.ChangeSetReader" plugin="tfs@5.142.0"/> <culprits class="com.google.common.collect.RegularImmutableSortedSet"> <string>domain</string> </culprits> </build>
3 Réponses :
Voici l'erreur que je reçois: p>
Impossible de convertir la valeur "System.Object []" en tapez "System.xml.xmldocument". Erreur: "La" valeur "commence la balise à la ligne 28 la position 12 ne correspond pas à la balise finale de 'hudson.model.stringparamevalue'. Ligne 29, position 11. " P> blockQuote>
manquant "<" à la ligne 28 pour une chose. Manquant "<" ligne 62. Il n'y a pas de nœuds de changelog. P>
Si ces fichiers XML sont générés automatiquement via Jenkins, je ne veux pas avoir à entrer et à modifier tous les fichiers XML pour le faire fonctionner. Y a-t-il un autre moyen de convertir le XML sans avoir à analyser le fichier XML?
Vous n'avez pas à utiliser [XML] si vous souhaitez simplement rechercher et remplacer le texte. Jenkins génère un XML invalide?
J'essaie de lire des informations du document XML. La seule raison pour laquelle j'essaie de remplacer la version est de lire le XML. Je peux le lire maintenant, mais j'ai ce message d'exception ci-dessus lors de l'exécution.
Je n'ai pas pu reproduire les deux premières erreurs.
En tant que développeur C #, je peux vous dire que la première erreur provient de foreach-objet code> car il renvoie un objet [ ] code> d'objets de chaîne (il ne sait pas qu'ils sont des chaînes bien sûr) et essaie de les convertir en un xmldocument code> à cause de [xml] code> mais un system.Object [] code> n'a aucun moyen de convertir en un xmldocument code> donc une erreur est lancée. Vous devez convertir l'objet [] code> dans un xmlnode [] code> puis dans un objet xmldocument code> pour l'analyse plus poussée. Ceci peut être accompli en utilisant Select-XML -Content code> après la modification. P> $xmlfile = Select-Xml -Content (gc "C:\Temp\build.xml" | ForEach-Object{$_ -replace "1.1-*","1.0"})
Mise en œuvre de ce que vous avez ici @Alexander Bielby et je suis maintenant invité à entrer un XPath lors de la course à pied. Cmdlet Select-XML à commande Position de pipeline 1 Valeurs d'alimentation pour les paramètres suivants: XPath: code>
C'est ce que j'ai fait - $ reporter = "c: \ temp \ repor.xml" $ xml = gc "c: \ temp \ build.xml" | Foreach-objet {$ _ -replace "1.1 - *", "1.0"} | Set-Content -Path $ Signaler -force $ Nom = Select-XML -Path $ xml -xpath "// @ @ nom" code> mais je retourne au même problème lorsque vous essayez de SELECT-XML -PATH < / Code> - ne peut pas être lu: le caractère "<', la valeur hexadécimale 0x3c, ne peut pas être incluse dans un nom code>
$id = $workspace.Split("\")[3]
Pouvez-vous poster un exemple de votre XML? Il est difficile de déranger sans exemple.
Échappez votre motif de regex:
-replace "1 \ .1 - \ *", "1.0" code>Après avoir supprimé les espaces avant les périodes après la XMLFILE $, il semble fonctionner correctement, bien que les méthodes SelectSingLenode sont vides.
De quels espaces parlez-vous? @ JS2010 Je l'ai eu pour travailler puis obtenir que le SelectSingLenode soit vide aussi. Je ne sais pas ce qui se passe là-bas.
$ nom = $ xmlfile .Selectsinglenode ("// nom"). '# texte'; $ résultat = $ xmlfile .Selectsinglenode ("// résultat"). '# texte'; $ Status = $ xmlfile .SelecteSingLenode ("// statut"). '# texte'; code> i Obtenir une erreur de syntaxe avec ces espaces avant le ".ECTRECTSINGLENODE (". Il n'y a aucun nom, résultat ou statut Nœuds dans le XML. Je ne vois pas pourquoi le SelectSingLenode viendrait avec quoi que ce soit. `Mises à jour effectuées sur XML et SelectSingLenode. Les espaces ne sont pas là dans mon script.
Je comprends la suppression des adresses de la vie privée. Est-ce une faute de frappe ou la balise manque vraiment au
<< / code>: https: // --- / valeur> code> sous: env_webmsdeployserviceURL code >Confidentialité @jrider
@ développeur_117 Le XML est construit sans la fin
code> sur certaines balises?Non, il n'y a pas d'erreurs (balises de fermeture) du XML à part moi en essayant de convertir le XML.
@jrider je suis d'accord .. "<" manque à deux endroits.
Correction des deux manquants "<".
Cela fonctionne bien pour moi savoir, sauf $ Espace de travail est null car il n'y a pas de nœuds de changelog.
Cela devrait fonctionner maintenant. J'ai couru un test rapide et cela le convertit à un objet XML valide. JS2010 est correct. La ligne:
$ id = $ workspace.split ("\") [3] code> ne fonctionnera pas car$ workspace = $ xmlfile.selectedsinglenode ("// changelog"). '# Texte code> est null. Il n'y a pas deChangelog code> nœud dans ce XMLMise à jour du SelectSingLenode ("// Changlog"). '# Texte' à l'espace de travail. J'ai toujours pu lire le fichier et afficher l'objet, mais le problème est que je reçois toujours le message d'exception ci-dessus. L'erreur "Impossible de convertir la valeur". J'essaie d'éliminer cette exception de l'affichage et de l'exécution du processus proprement.
@ Developer_117 Après les corrections à l'OP, il semble fonctionner correctement. Le XMLFILE $ est le XML chargé. Désolé, je suis confus sur ce que vous essayez de faire. Y a-t-il plus de code que vous exécutez ce n'est pas affiché?
Merci à tous pour votre aide. @ Josefz solution a résolu mon problème.