Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations strongm on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Handle xml files with perl

Status
Not open for further replies.

crult

Technical User
Sep 24, 2010
13
FR
Hello,

I have a large number of xml files in a folder. I want to read and extract the content of each xml file to a new.txt. I'm only interested in the content having the tag <Texte>, and i want to create a .txt file (a texte file for each of my xml's). I use the perl modules xml twig and xml simple. There's the code i have until now:

my $xml_dir="C:\xmlperl";
my $output="C:\xmlperl\output.txt";
my $file = $ARGV[0];

opendir(DIR,$xml_dir) || die;

my @TranscriptsList = grep(/xml$/, readdir(DIR));
closedir(DIR);

foreach $file (@TranscriptsList) {

my $twig= new XML::Twig(TwigRoots => {Texte => 1});

$twig->parsefile($file);

$twig->print;


open XMLOUT, '>>C:\xmlperl\output.txt';

$twig->print(\*XMLOUT) or die;

close XMLOUT;

}

As you can see, i can only print in a single .txt file the output of the xml content. Can you help me please?

thank you in advance
 
Hi,

If I have understood your post correctly, why not create output file dynamically and write to it. Something like
Code:
my $cnt = 0;
my $out;
foreach $file (@TranscriptsList) {

my $twig= new XML::Twig(TwigRoots => {Texte => 1});

$twig->parsefile($file);

$twig->print;

$out = 'C:\xmlperl\output'.$cnt.'.txt';
open XMLOUT, $out;
$twig->print(\*XMLOUT) or die;

close XMLOUT;

}

Also there are couple of things unclear in your code
Code:
my $output="C:\xmlperl\output.txt"; // you could have used the variable $outout in loop instead of hardcore string
my $file = $ARGV[0];// not sure why its accepting command line parameter, you have used same variable for array element

Note: Code not tested.

--------------------------------------------------------------------------
I never set a goal because u never know whats going to happen tommorow.
 
Hello,

thank you for the help. Now i tested my code like this:

Code:
use XML::Twig;

my $xml_dir = 'C:\xmlperl';
my $cnt = 0;
my $out;



opendir(DIR,$xml_dir)  || die;

my @TranscriptsList = grep(/xml$/, readdir(DIR));

closedir(DIR);



foreach $file (@TranscriptsList) {

my $twig= new XML::Twig(TwigRoots => {Texte => 1});

$twig->parsefile($file);

$twig->print;

$out = 'C:\xmlperl\output'.$cnt.'.txt';
open XMLOUT, $out;
$twig->print(\*XMLOUT) or die;

close XMLOUT;

}

In the input folder "C:\xmlperl", there are 3 xml files:

20040101N0076.xml
20040101N0077.xml
20040101N0078.xml

When i run the script i get the error: "Couldn't open 20040101N0076.xml. Not such file or directory at line 19 ($twig->parsefile($file);)
 
Hi,

Try printing the value of $file. What is the value it is storing. I guess its only the file name and not the dir. Try prepending the dir to $fil and see.

--------------------------------------------------------------------------
I never set a goal because u never know whats going to happen tommorow.
 
Hi,

i've change $xml_dir to $file but i gives always the same error...

Code:
use XML::Twig;

my $file = 'C:\xmlperl';
my $cnt = 0;
my $out;



opendir(DIR,$file)  || die;

my @TranscriptsList = grep(/xml$/, readdir(DIR));

closedir(DIR);



foreach $file (@TranscriptsList) {

my $twig= new XML::Twig(TwigRoots => {Texte => 1});

$twig->parsefile($file);

$twig->print;

$out = 'C:\xmlperl\output'.$cnt.'.txt';
open XMLOUT, $out;
$twig->print(\*XMLOUT) or die;

close XMLOUT;

}

Also i tried both $twig->print; and $twig->($file);
Another problem with this line:

my $file = 'C:\xmlperl';

When change simple quotes '....' to double "....." it gives me a screen print of two another xml files that existed in that folder but i deleted them yesterday to put the 3 new ones! Whys this? Thanks!
 
Sorry, i meant: Also i tried both $twig->print; and $twig->print($file);
 
Try this
Code:
use XML::Twig;

my $xml_dir = 'C:\xmlperl';
my $cnt = 0;
my $out;



opendir(DIR,$xml_dir)  || die;

my @TranscriptsList = grep(/xml$/, readdir(DIR));

closedir(DIR);



foreach $file (@TranscriptsList) {

my $twig= new XML::Twig(TwigRoots => {Texte => 1});

$file = $xml_dir."\".$file;

$twig->parsefile($file);

$twig->print;

$out = 'C:\xmlperl\output'.$cnt.'.txt';
open XMLOUT, $out;
$twig->print(\*XMLOUT) or die;

close XMLOUT;

}

Not tested.

--------------------------------------------------------------------------
I never set a goal because u never know whats going to happen tommorow.
 
Problem again...no such file or directory.
 
Have you tried printing $file inside the loop?

--------------------------------------------------------------------------
I never set a goal because u never know whats going to happen tommorow.
 
Yes. In the editor after this line

$file = $xml_dir."\".$file;

the code colour changes to gray, like something is going wrong, why?
 
Hi,
what output does the print $file statement give?

--------------------------------------------------------------------------
I never set a goal because u never know whats going to happen tommorow.
 
cannot find string terminator ' '' ' (something like that) anywhere before EOF at line 21 ($file = $xml_dir."\".$file;)
 
Never use reversed slashes in perl (that's what I do at least).
This line
[tt]$file = $xml_dir."\".$file;[/tt]
is incorrect as the reverse slash escapes the second quote that is not seen by the interpreter.
You should write
[tt]$file=$xml_dir.'/'.$file;[/tt]
or
[tt]$file=join('/',$xml_dir,$file);[/tt]
or
[tt]$file="$xml_dir/$file";[/tt]

Franco
: Online engineering calculations
: Magnetic brakes for fun rides
: Air bearing pads
 
Thanks, that's it! Now it works, but only with the code to export one only txt file with the content of all xml's:

Code:
use XML::Twig;

my $xml_dir = 'C:\xmlperl';
my $cnt = 0;
my $out;



opendir(DIR,$xml_dir)  || die;

my @TranscriptsList = grep(/xml$/, readdir(DIR));

closedir(DIR);



foreach $file (@TranscriptsList) {

my $twig= new XML::Twig(TwigRoots => {Texte => 1});

#$file = $xml_dir.'/'.$file;

$file=join('/',$xml_dir,$file);

#$file="$xml_dir/$file"; 

$twig->parsefile($file);

$twig->print;

open XMLOUT, '>>C:\xmlperl\output.txt';

$twig->print(\*XMLOUT) or die;

close XMLOUT;

}

The result of the output.txt is:

Code:
<?xml version="1.0" encoding="UTF-8"?>
<Document xyurl="xyl://20040101N0076.xml"><Texte><P>Outre leurs activités habituelles, les hôpitaux ont dû faire face à une catastrophe exceptionnelle, durant l'été : la canicule, qui a provoqué 15 000 morts en août. Les urgentistes ont été les premiers à porter le drame sur la place publique. Près de 3 000 décès sont survenus dans des maisons de retraite et plus de 6 000 à l'hôpital ou en clinique, a révélé une étude de l'Institut national de la santé et de la recherche médicale (Inserm). Mais près de la moitié des personnes ayant trouvé la mort à l'hôpital venaient de maisons de retraite et de centres de long séjour. En reconnaissance de la « mobilisation exceptionnelle » des personnels hospitaliers ayant travaillé du 7 au 19 août, le ministère de la santé a annoncé, le 1er décembre, qu'une prime de 90 à 130 euros leur serait allouée. L'idée a été critiquée par des syndicats hospitaliers, qui soulignent la nécessité de donner des moyens « pérennes » aux hôpitaux.</P><P/></Texte></Document><?xml version="1.0" encoding="UTF-8"?>
<Document xyurl="xyl://20040101N0077.xml"><Texte><P>« C'est le plus beau réveillon de ma vie. » Alexis, passionné de spéléologie et d'escalade, a fêté Noël dans les arbres, parc Paul-Mistral, à Grenoble, et passera de la même façon le Nouvel An. Il est l'un des « accro-citoyens » qui, depuis plus de huit semaines, résistent au froid et même à la neige, perchés dans de drôles de petites cahutes faites de bâches en plastique. Ils espèrent empêcher l'abattage de 300 arbres, prévu dans le cadre de la construction du nouveau stade de football de l'agglomération.</P><P>Trois au départ, ils sont aujourd'hui une cinquantaine à se relayer jour et nuit pour assurer la garde des arbres parmi lesquels un orme champêtre, l'un des rares spécimens survivants d'une espèce décimée par la maladie de la graphiose. Originaires de Grenoble, ou venus d'ailleurs « par solidarité », ils passent une ou plusieurs nuits. Chômeurs, étudiants, intermittents du spectacle, routards ou saisonniers, beaucoup ont en commun la passion de la grimpe. Aucun n'est contre le football. Tous demandent un gel des travaux, la révision du projet et l'étude d'un nouvel emplacement. Ils souhaitent surtout que la population soit consultée. Et si la légalité du permis de construire, qui a été attaqué par des associations de défense du parc, devait être confirmée, certains disent qu'ils partiront. En attendant, ils veulent empêcher l' « irréparable ».</P><P>Spontanée, leur action a surpris les pouvoirs publics. « Ils ont cru qu'à la première pluie, nous abandonnerions », s'amusent quelques-uns. Depuis, la ville et la communauté d'agglomération ont saisi la justice en invoquant le trouble causé à l'ordre public. « Même si la cause peut paraître sympathique, la loi doit demeurer la même pour tous », justifie le maire, Michel Destot (PS), tandis que son entourage parle de dérive entre une intention louable au départ, et la récupération dont elle fait aujourd'hui l'objet. La veille de Noël, le tribunal administratif a ordonné l'évacuation des arbres et fixé une astreinte de 100 euros par jour de retard et par personne. Depuis, plus rien. Mais Alexis ne se fait pas d'illusions : la trêve accordée pour la période des fêtes va bientôt s'achever. Lundi 5 janvier, l'entreprise chargée de l'abattage doit venir sécuriser le chantier. « Ils vont devoir nous déloger », sourit le jeune garçon, en montrant les tyroliennes par lesquelles les occupants pourront voler d'arbre en arbre.</P><P>La municipalité, pour qui le stade s'intègre dans un projet d'embellissement de cette partie de la ville, dénonce une « dramatisation » de l'abattage et promet qu'à terme, « la superficie du parc passera de 18 à 31 hectares et de 1 300 à 1 600 arbres ». Quant au fameux orme, « son patrimoine génétique a été sauvegardé », assure-t-elle.</P><P>« Il ne s'agit pas d'un nouveau stade mais de la reconstruction d'un stade sur l'emplacement de l'ancien, démoli entre-temps, avec une emprise réduite de 4 000 m 2 (sauf les jours de match), tempère Didier Migaud (PS), le président de communauté d'agglomération. « Cet emplacement est le moins pénalisant en termes de déplacements, avec deux lignes de tramway et trois de bus », argumente-t-il. Les écologistes, eux, jugent le stade « mal situé », « trop grand et trop coûteux » (55 millions d'euros) et ont voté contre.</P><P>Le sujet alimente presque quotidiennement la rubrique des lecteurs du Dauphiné libéré, entre pro et anti-écureuils, partisans de la manière forte et citadins reconnaissants. L'action des « accro-citoyens » est devenue l'enjeu d'une bataille politicienne qui les dépasse. Le jour où des supporteurs de l'équipe de football de Grenoble se sont retrouvés face à des défenseurs du parc, parmi lesquels des partisans de l'ancien maire Alain Carignon, aujourd'hui président de l'UMP pour le département, Alexis est resté perché dans les branches. « Ça sentait le coup monté », dit-il.</P><P/></Texte></Document><?xml version="1.0" encoding="UTF-8"?>
<Document xyurl="xyl://20040101N0078.xml"><Texte><P>C'EST UN « MYSTÈRE » qui la travaillera sans doute encore dans un an, quand elle aura remisé sa blouse blanche au placard, au terme d'une belle carrière. Pourquoi les services de pointe comme le sien, spécialisé en greffes de moelle osseuse à l'hôpital parisien Saint-Louis, sont-ils désertés par les jeunes internes français ? Le professeur Eliane Gluckman, d'une nature pourtant plus prompte à l'optimisme qu'à la sinistrose, s'avoue « inquiète » pour la relève du système de santé : « Nous avons formé des médecins du monde entier à la greffe de moelle, c'est notre tradition. Et les Français ne veulent pas venir... », soupire-t-elle. Un comble dans ce service, l'un des fleurons de l'hématologie française, l'antre historique du professeur Jean Bernard, qui fut son maître.</P><P>Comme ses confrères franciliens, le professeur Gluckman a donc décidé de se joindre au cri d'alarme des patrons de médecine qui viennent d'interpeller leur ministre de tutelle, Jean-François Mattei, dans une lettre ouverte, à grand renfort de médiatisation. L'appel est sans précédent. Ils étaient 58 professeurs à en signer une première mouture, le 16 octobre. Ils sont aujourd'hui 244 - dont 200 chefs de service - de l'Assistance publique-Hôpitaux de Paris (AP-HP), à vouloir « attirer solennellement » l'attention du ministre sur « l'acuité de la crise hospitalière », vécue « quotidiennement ».</P><P>Les « raisons immédiates » de cette crise, qui se nourrit entre autres de la mise en place des 35 heures ? La pénurie de soignants, et notamment de médecins. Les patrons insistent sur un mal qui risque de rester vivace quelques années : la transmission de leur savoir-faire médical est en train de se déliter et avec elle la qualité du système de soins, estiment-ils, faute d'internes qui sont les futures élites hospitalières. Ces jeunes recrues, en voie d'extinction dans certaines spécialités, sont remplacées par des « faisant fonction » étrangers aux niveaux de formation fluctuants, qui retournent souvent exercer dans leur pays. « En dix ans, le nombre d'internes a baissé de 45 % et, aujourd'hui, un tiers de leurs postes est occupé par des médecins étrangers », déplore le professeur André Grimaldi, chef du service de diabétologie de la Pitié-Salpêtrière et initiateur de l'appel. Une situation qui résulte à la fois d' « un numerus clausus excessif » - le nombre de postes ouvert chaque année est passé de 8 588 en 1972 à 5 600 en 2004, en vertu d'une logique d'économies - et de « la réduction du nombre de reçus à l'internat de spécialité ».</P><P/><P>SPÉCIALITÉS DÉSERTÉES</P><P>Le problème ne serait pas si aigu si les internes ne se détournaient pas, en plus, des spécialités difficiles. Les médecins en herbe fuient les blocs de chirurgie générale ou les chambres stériles pour des horizons moins astreignants. En 2002, seulement quatre internes ont choisi la chirurgie digestive en France. En hématologie, les deux tiers des postes d'internes sont pourvus par des étrangers. Au dernier semestre, un seul interne a choisi un poste de gériatrie sur les cinq proposés en région parisienne. Contraste saisissant avec les 88 postes offerts en radiologie, qui ont tous trouvé preneurs. Comme en dermatologie et en cardiologie, spécialités qui ont l'avantage de se pratiquer en ville.</P><P>La raison de ces désertions ? « La pénibilité, les gardes, les risques de complication et de procès », résume le professeur Olivier Soubrane, chef du service de chirurgie digestive à l'hôpital Cochin. Fini le temps où les meilleurs se ruaient sur la chirurgie, discipline reine. Sur ses cinq postes d'interne, un seul est pourvu par un interne des Hôpitaux de Paris. La médecine sacerdotale serait-elle en perte de vitesse ? « Quand j'ai commencé, poursuit-il, j'étais de garde un jour sur deux ou trois pendant les vacances. J'ai toujours voulu être chirurgien, j'étais très enthousiaste. Pour moi, c'est bien plus qu'un métier. » L'enthousiasme y est toujours, quoique parfois mâtiné de doute, au vu des nouvelles contraintes. « Les valeurs ne sont plus les mêmes, renchérit le professeur Grimaldi. Les jeunes pensent à leur temps de loisir... Mais c'est vrai que les internes ne se sentent pas reconnus et sont en première ligne face à la crise de l'hôpital... Nous, nous étions choyés. »</P><P>Le dernier interne français que le professeur Gluckman a vu passer remonte à plus d'un an : « En hématologie, les débouchés sont très limités. Avant d'obtenir un poste, la barre est haute. Et on prend en charge des patients très lourds... », explique-t-elle. Alors, tous les six mois, les tracas recommencent. Débusquer des « faisant fonction » - ce semestre, une Libanaise, une Guatémaltèque, un Vietnamien... Se démener pour les aider à trouver un logement, voire des bourses. Parfois les payer sur des crédits de recherche, quand des postes ont été supprimés. Et puis, quand ils arrivent, veiller à les encadrer : « Un senior couvre en permanence un interne, on double les gardes. » Pour beaucoup qui lui donnent satisfaction et repartent avec un CV béton, elle a dû en renvoyer certains. « Parfois, c'est dangereux. Il y un risque d'altération de la qualité des soins, prévient-elle. Le problème qui se posera à terme est aussi qualitatif : on titularisera bon nombre de médecins étrangers, alors qu'ils n'ont pas le niveau, parce qu'il manquera des jeunes formés. »</P><P>Un vrai casse-tête. En cancérologie à Saint-Louis, le professeur Jean-Louis Misset en a fait les frais au dernier semestre : deux des internes étrangers qu'il avait trouvés se sont désistés au dernier moment. Il a dû se séparer d'un troisième au bout de quinze jours pour incompétence. Résultat : pendant qu'il s'échinait à trouver une solution, entre pièges de la réglementation et appel au cabinet du ministre, le service a frôlé la surchauffe pendant trois mois. « Les seniors ont dû tout assurer, rédiger les comptes rendus, faire les visites... Les consultations ont été réduites, il a fallu rapprocher certaines activités du service et fermer des lits », explique-t-il.</P><P>« PARADOXE »</P><P>Une situation d'étranglement entre pénurie de médecins et d'infirmières (dont le nombre de postes vacants dépasse les 1 500 en Ile-de-France), sur fond de 35 heures, que décrit le professeur Patrick Vexiau, chef du service d'endocrinologie à Saint-Louis : « Quand on travaille déjà 70 heures par semaine, qu'on a de plus en plus de travail administratif à fournir soi-même, de papiers à remplir, le temps médical se réduit... » Pendant les fêtes, il a dû fermer 8 lits sur 28, faute de personnel. En chirurgie générale à Cochin, une unité de 20 lits et une salle d'opération sont fermées depuis plus d'un an, souligne le professeur Bertrand Dousset. Qui affirme, d'un trait de colère : « On soigne aujourd'hui moins bien nos patients qu'il y a trois ans, par manque de personnel ». La plaie de l'hôpital ? Son « paradoxe ». D'un côté, « l'affichage d'objectifs louables : transparence, lutte contre la douleur, les infections nosocomiales, etc. » De l'autre, « la réalité médicale et infirmière du terrain ».</P><P>Comment desserrer l'étau ? Les signataires revendiquent notamment une hausse du numerus clausus, la généralisation de la durée de l'internat à cinq ans, une amélioration de l'accueil et de la rémunération des médecins étrangers, l'embauche de praticiens. Des mesures à long terme et des soins d'urgence.</P><P/></Texte></Document>

Now ihave two problems to solve:

1. For the unique output.txt (as above), if i could print the results to be more lisible, wthe spaces and eliminating the xml declaration <?xml version="1.0" encoding="UTF-8"?>. Something like this:

Code:
<Document xyurl="xyl://20040101N0076.xml"><Texte><P>Outre leurs activités habituelles, les hôpitaux ont dû faire face à une catastrophe exceptionnelle, durant l'été : la canicule, qui a provoqué 15 000 morts en août. Les urgentistes ont été les premiers à porter le drame sur la place publique. Près de 3 000 décès sont survenus dans des maisons de retraite et plus de 6 000 à l'hôpital ou en clinique, a révélé une étude de l'Institut national de la santé et de la recherche médicale (Inserm). Mais près de la moitié des personnes ayant trouvé la mort à l'hôpital venaient de maisons de retraite et de centres de long séjour. En reconnaissance de la « mobilisation exceptionnelle » des personnels hospitaliers ayant travaillé du 7 au 19 août, le ministère de la santé a annoncé, le 1er décembre, qu'une prime de 90 à 130 euros leur serait allouée. L'idée a été critiquée par des syndicats hospitaliers, qui soulignent la nécessité de donner des moyens « pérennes » aux hôpitaux.</P><P/></Texte></Document>

<Document xyurl="xyl://20040101N0077.xml"><Texte><P>« C'est le plus beau réveillon de ma vie. » Alexis, passionné de spéléologie et d'escalade, a fêté Noël dans les arbres, parc Paul-Mistral, à Grenoble, et passera de la même façon le Nouvel An. Il est l'un des « accro-citoyens » qui, depuis plus de huit semaines, résistent au froid et même à la neige, perchés dans de drôles de petites cahutes faites de bâches en plastique. Ils espèrent empêcher l'abattage de 300 arbres, prévu dans le cadre de la construction du nouveau stade de football de l'agglomération.</P><P>Trois au départ, ils sont aujourd'hui une cinquantaine à se relayer jour et nuit pour assurer la garde des arbres parmi lesquels un orme champêtre, l'un des rares spécimens survivants d'une espèce décimée par la maladie de la graphiose. Originaires de Grenoble, ou venus d'ailleurs « par solidarité », ils passent une ou plusieurs nuits. Chômeurs, étudiants, intermittents du spectacle, routards ou saisonniers, beaucoup ont en commun la passion de la grimpe. Aucun n'est contre le football. Tous demandent un gel des travaux, la révision du projet et l'étude d'un nouvel emplacement. Ils souhaitent surtout que la population soit consultée. Et si la légalité du permis de construire, qui a été attaqué par des associations de défense du parc, devait être confirmée, certains disent qu'ils partiront. En attendant, ils veulent empêcher l' « irréparable ».</P><P>Spontanée, leur action a surpris les pouvoirs publics. « Ils ont cru qu'à la première pluie, nous abandonnerions », s'amusent quelques-uns. Depuis, la ville et la communauté d'agglomération ont saisi la justice en invoquant le trouble causé à l'ordre public. « Même si la cause peut paraître sympathique, la loi doit demeurer la même pour tous », justifie le maire, Michel Destot (PS), tandis que son entourage parle de dérive entre une intention louable au départ, et la récupération dont elle fait aujourd'hui l'objet. La veille de Noël, le tribunal administratif a ordonné l'évacuation des arbres et fixé une astreinte de 100 euros par jour de retard et par personne. Depuis, plus rien. Mais Alexis ne se fait pas d'illusions : la trêve accordée pour la période des fêtes va bientôt s'achever. Lundi 5 janvier, l'entreprise chargée de l'abattage doit venir sécuriser le chantier. « Ils vont devoir nous déloger », sourit le jeune garçon, en montrant les tyroliennes par lesquelles les occupants pourront voler d'arbre en arbre.</P><P>La municipalité, pour qui le stade s'intègre dans un projet d'embellissement de cette partie de la ville, dénonce une « dramatisation » de l'abattage et promet qu'à terme, « la superficie du parc passera de 18 à 31 hectares et de 1 300 à 1 600 arbres ». Quant au fameux orme, « son patrimoine génétique a été sauvegardé », assure-t-elle.</P><P>« Il ne s'agit pas d'un nouveau stade mais de la reconstruction d'un stade sur l'emplacement de l'ancien, démoli entre-temps, avec une emprise réduite de 4 000 m 2 (sauf les jours de match), tempère Didier Migaud (PS), le président de communauté d'agglomération. « Cet emplacement est le moins pénalisant en termes de déplacements, avec deux lignes de tramway et trois de bus », argumente-t-il. Les écologistes, eux, jugent le stade « mal situé », « trop grand et trop coûteux » (55 millions d'euros) et ont voté contre.</P><P>Le sujet alimente presque quotidiennement la rubrique des lecteurs du Dauphiné libéré, entre pro et anti-écureuils, partisans de la manière forte et citadins reconnaissants. L'action des « accro-citoyens » est devenue l'enjeu d'une bataille politicienne qui les dépasse. Le jour où des supporteurs de l'équipe de football de Grenoble se sont retrouvés face à des défenseurs du parc, parmi lesquels des partisans de l'ancien maire Alain Carignon, aujourd'hui président de l'UMP pour le département, Alexis est resté perché dans les branches. « Ça sentait le coup monté », dit-il.</P><P/></Texte></Document>

Or eliminate totaly the tags.

2. Finally, if i could make this (as a second option), to export each xml file to a single txt file.

Thanks so much for the help, have a nice day!
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top