Bonjour,
J'ai un fichier xml dans lequel je cherche des ressources jdbc :
Cela retourne bien les ressources recherchées mais selon un format qu'il m'est difficile d'appréhender :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 liste_ressource_jdbc=$(awk '/<factories xmi:type="resources.jdbc/,/<\factories>/' ${chemin_socle}/config/cells/CellBase/nodes/*/resources.xml)
Je souhaite pouvoir travailler sur chacune des ressources trouvées (2 ici en l'occurence), mais de part ma commande awk je ne sépare déjà pas la première factorie de la 2ème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <factories xmi:type="resources.jdbc:DataSource" xmi:id="DataSource_1437400117880" name="SINF_ORACLE" jndiName="jdbc/SINF_ORACLE" description="Data source template" category="default" authMechanismPreference="BASIC_PASSWORD" authDataAlias="SINF_ORACLE" manageCachedHandles="false" logMissingTransactionContext="true" relationalResourceAdapter="builtin_rra" statementCacheSize="10" datasourceHelperClassname="com.ibm.websphere.rsadapter.Oracle11gDataStoreHelper"> <propertySet xmi:id="J2EEResourcePropertySet_1437401870101"> <resourceProperties xmi:id="J2EEResourceProperty_1437401870101" name="URL" type="java.lang.String" value="jdbc:oracle:thin:@devswi1.recm.id.fr.cly:12996:spinrct1" description="Datasource SINF_ORACLE" required="true"/> <resourceProperties xmi:id="J2EEResourceProperty_1437401870102" name="URL" type="java.lang.String" value="jdbc:oracle:thin:@devswi1_recm.id.fr.cly:12996:spinrct1" description="Datasource SINF_ORACLE" required="true"/> </propertySet> <connectionPool xmi:id="ConnectionPool_1437401870101" connectionTimeout="1800" maxConnections="30" minConnections="1" reapTime="180" unusedTimeout="1800" agedTimeout="20" purgePolicy="EntirePool" numberOfSharedPoolPartitions="0" numberOfUnsharedPoolPartitions="0" freePoolDistributionTableSize="0" surgeThreshold="-1" surgeCreationInterval="0" testConnection="false" testConnectionInterval="0" stuckTimerTime="0" stuckTime="0" stuckThreshold="0"/> <mapping xmi:id="MappingModule_1437401870101" mappingConfigAlias="DefaultPrincipalMapping" authDataAlias="SINF_ORACLE"/> </factories> <factories xmi:type="resources.jdbc:DataSource" xmi:id="DataSource_1441270150893" name="SINF_ORACLE_DEV" jndiName="jdbc/SINF_ORACLE_DEV" description="Data source template" category="default" authMechanismPreference="BASIC_PASSWORD" authDataAlias="SINF_ORACLE_DEV_ALIAS" manageCachedHandles="false" logMissingTransactionContext="true" relationalResourceAdapter="builtin_rra" statementCacheSize="10" datasourceHelperClassname="com.ibm.websphere.rsadapter.Oracle11gDataStoreHelper"> <propertySet xmi:id="J2EEResourcePropertySet_1441270150894"> <resourceProperties xmi:id="J2EEResourceProperty_1441270150894" name="URL" type="java.lang.String" value="jdbc:oracle:thin:@devswi1_dev.id.fr.cly:12996:spindvl1" description="Datasource SINF_ORACLE_DEV" required="true"/> </propertySet> <connectionPool xmi:id="ConnectionPool_1441270150894" connectionTimeout="1800" maxConnections="30" minConnections="1" reapTime="180" unusedTimeout="1800" agedTimeout="20" purgePolicy="EntirePool" numberOfSharedPoolPartitions="0" numberOfUnsharedPoolPartitions="0" freePoolDistributionTableSize="0" surgeThreshold="-1" surgeCreationInterval="0" testConnection="false" testConnectionInterval="0" stuckTimerTime="0" stuckTime="0" stuckThreshold="0"/> <mapping xmi:id="MappingModule_1441270150894" mappingConfigAlias="DefaultPrincipalMapping" authDataAlias="SINF_ORACLE_DEV_ALIAS"/> </factories> </resources.jdbc:JDBCProvider> </xmi:XMI>
Je ne vous cache pas que je n'ai pas réussi à utiliser les regex de manière à sortir <factories xmi:type=\"resources.jdbc(.*)<\factories> correctement.
Je souhaite mettre dans une variable chacune des ressources pour ensuite rechercher les champs qui m'intéressent, POUR CHAQUE RESSOURCE :
name="SINF_ORACLE"
jndiName="jdbc/SINF_ORACLE"
value="jdbc:oracle:thin:@devswi1.recm.id.fr.cly:12996:spinrct1"
authDataAlias="SINF_ORACLE"
Donc j'ai 2 problèmes :
1- Je reçois toutes les factories (ici il y en a 2 mais il peut y en avoir 15) et je n'arrive pas à les gérer une par une.
2- Actuellement je cherche l'occurrence d'un champ, sa position et si elle est différente de 0 (donc si le nom cherché est trouvé), je la récupère ... ce n'est vraiment pas satisfaisant :-(
Pouvez-vous au moins m'aider à séparer les factories, à base d'une expression régulière, et s'il le faut, je passerais par un fichier intermédiaire dans lequel je copierais momentanément la factorie, pour aller en extirper les "clés cibles" (si vous avez un preg à me fournir sur chaque clé cherchée dans une factorie, je suis preneur ^^)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 for ressource_jdbc in ${liste_ressource_jdbc} do #echo $ressource_jdbc pos_jndi=$(expr match "$ressource_jdbc" 'jndiName') if [ $pos_jndi != "0" ]; jndi=$ressource_jdbc; echo $jndi; fi done
Merci par avance pour votre aide et désolé pour le mode noob en expressions régulières, je vais faire le nécessaire pour les maîtriser de mieux en mieux désormais (livres, exos, sites memos ... )
NB : En jython, cela est bien plus simple de récupérer ces informations, mais dans ce cas il me faut tout faire en shell script.
Partager