How to use XmlResolver. Or, reading an xhtml file in .net

by Matt 28. June 2007 06:24

So, reading xhtml. Dead easy, right? After all, it's just xml. Whack it into an XmlReader and Bob's your uncle.

Unless your xhtml uses an entity such as £.

Xml has 5 defined entities, &lt; (<), &gt; (>), &amp; (&), &apos; (') and &quot; ("). All self-respecting xml parsers will handle these. But xhtml, and it's poorer cousin, html define a whole raft more. Try and put such an xhtml file through an xml parser, and there will be problems.

What you need to do is tell the xml parser about these extra entities. Which means getting the xml parser to also read in a bunch of dtd's. Again - dead easy, right?

Well, when you know the correct voodoo, yes, it's kinda easy.

This post provides sample code on how to do this in .net. The idea is that you need to tell the parser that it's reading an xhtml file, and then provide the xhtml dtd for it when it asks. The code here does just this, and also shows how to keep that dtd and associated files in your applications resources. Unfortunately, it's all a bit confusing as to how and why it actually works, so I thought I'd try and demystify it a bit. For the moment, we're going to ignore the idea of pulling content from resources, and just explain what's happening in the normal case.

This file is xhtml

Firstly, let's tell the parser that we're reading an xhtml file. This just means giving it a DocType, such as:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

This should really be specified in the file itself, but if you're just parsing a fragment, you need to tell the XmlReader explicitly. This is accomplished by populating the DocTypeName and PublicId fields of XmlParserContext, as the post demonstrates.

Define xhtml...

The next step is to get the dtd into the parser. Which is where we start looking at XmlResolver, and where things get a little confusing. The interaction and relationship between the XmlReader and the XmlResover isn't very well documented, but it boils down to this - any time the XmlReader has to get content from a URI, it defers to the XmlResolver.

The best way to explain this is by example.

Say you're reading an xhtml file, via a call to XmlReader.Create, passing in a filename - at least, that's the common usage. The filename is actually a URL and could easily be a http URL. The first thing XmlReader does is pass this URL into XmlResolver.ResolveUri. This allows us a hook to modify or replace the URL of the file, if we want to (e.g. instead of loading it over http, get it from a cache on the local file system). Essentially, we just return back a new URI that is the actual location of the file.

Once the URL to the file has been resolved, it's passed into XmlResolver.GetEntity, which will open and return a stream to the file. Since it's a stream, the file could be anywhere - on the file system, over http or in a resource. Now the XmlReader has the file to parse, and the resolved URL is considered to be the base URI of the file.

Incidentally, if we don't use a URL to load the file into the XmlReader, we can still pass in a URI via the BaseURI field of XmlParserContext. The resolved version of this URI is then the base URI of the file.

Note that the base URI is the URI to the file itself - not to the parent "directory" of the file. This is actually the same as the base attribute in html, even though I was expecting it to be the directory.

If the XmlReader needs to bring in any more content from within the file (a nice example would be xlink or xinclude, except I don't think they are supported), it will pass the URI identifying the content to the XmlResolver, and then pass the resolved URI back to GetEntity to actually get the content.

If there is a DocType associated with the parser (via the file, or via the context) that will need to be resolved. So the public id is passed into ResolveUri. In the case of (strict) xhtml, this will be "-//W3C//DTD XHTML 1.0 Strict//EN". The XmlResolver needs to know about this DocType and return back a URI that can GetEntity will be able to open a stream on. Let's assume we've subclassed XmlUrlResolver so it's ResolveUri knows that the xhtml DocType maps to the correct http URL so we simply return "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" and let the standard implementation of GetEntity download it for us.

Now the xhtml1-strict.dtd references other files to pull in the actual entity definitions. The XmlReader follows the same procedure - it calls ResolveUri and then GetEntity. The important part to remember here is that these references might be relative. In other words, the dtd might not have fully qualified http URLs. The base URI passed to ResolveUri is the resolved URI of the DocType - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd". Resolving "xhtml-lat1.ent" against that URL means we should return "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent", which is the correct location for the entity file. The reader will just download that file and continue.

Of course, it's entirely possible that the reference is fully qualified, in which case, we could just return it directly.

Lett's revision guide version

To recap:

  1. Resolve the file URL and download it.
  2. Resolve the public Id of the DocType fully qualified URI, using the resolved URI of the file as the "current directory" if required, and download the dtd.
  3. Parse the dtd and resolve any external references against the resolved URI of the dtd (if appropriate) and download them.
  4. Parse the references and the file and resolve and download any other external references.

So, it's actually quite straightforward, especially in the use case of file:// and http:// URIs.

Pulling content from resources

Now, back to the sample code. The code is absolutely fine as it stands, but I think I'd implement it differently. It currently has a list of known URIs, made up of "urn:" plus the DocType or the dtd/entity filename. In the ResolveUri method, it takes the given relative URI and appends it to "urn:" and then compares it against the list of know URIs. The GetEntity method just compares the given absolute URI and returns the relevant resource stream.

This feels a bit fragile. I'd implement it more like the file or http URI handlers. I'd have one known resource, and that's the xhtml dtd, keyed on the DocType URI. ResolveUri would match the relative URI against this DocType URI and return back a resource:// URI, which would contain an assembly identifier, plus the namespaced resource name, such as "resource://sticklebackplastic.xhtml/sticklebackplastic.xhtml.resources.xhtml1-strict.dtd". The GetEntity method can then parse this to get the relevant resource stream. I think this way is better because when the dtd requires an external reference, it will call ResolveUri with "xhtml-lat1.ent" as the relative URI and "resource://sticklebackplastic.xhtml/sticklebackplastic.xhtml.resources.xhtml1-strict.dtd" as the base URI. Simply combining the URIs gives me "resource://sticklebackplastic.xhtml/sticklebackplastic.xhtml.resources.xhtml-lat1.ent". Doing this requires that all the external references are stored in the same resource namespace, the same as with the file or http cases, and the same for the sample code. But it also means that the resolver only needs to know about the mapping between the DocType and the dtd, and doesn't have to worry about creating resource URIs for all stored files.

Now I've just got to implement it.

Tags:

Comments (105) -

Jignesh
Jignesh
2/9/2009 10:56:40 AM #

RE: How to use XmlResolver. Or, reading an xhtml file in .net

Can you please post code.

Reply

Lady
Lady
2/26/2011 3:21:18 AM #

I find that readers respond very well to posts that show your own weaknesses, failings and the gaps in your own knowledge rather than those posts where you come across as knowing everything there is to know on a topic. People are attracted to humility and are more likely to respond to it than a post written in a tone of someone who might harshly respond to their comments.

Reply

Franchise Advice
Franchise Advice
5/24/2011 5:02:39 AM #

Nice platform, just researching some blogs to use for my franchise advice website.  All the best, Matt.

Reply

best suv 2010
best suv 2010
7/20/2011 10:34:34 PM #

Per il tuo bambino scegli Moncler. Una scelta di capi, estivi ed invernali, eccezionali. Tuo figlio sarà sempre alla moda e potrà muoversi in totale comodità.

Reply

LAURENCE  Debora
LAURENCE Debora
7/30/2011 8:35:34 AM #

Argent: faites de l’argent avec votre annuaire via allopass et encore plus...annuaires.

Reply

Lexapro class action
Lexapro class action
10/20/2011 9:14:13 PM #

I have been searching for this quality blogs regarding this niche. Searching in Yahoo drove me here, I just found this kind of satisfactory readings i was looking for. I must bookmark this website to avoid missing it again.

Reply

yaz lawsuit
yaz lawsuit
10/21/2011 1:50:23 AM #

I really love the way information is presented in your post. I have added you in my social bookmark. Cheers.

Reply

yaz lawsuit
yaz lawsuit
10/22/2011 4:27:36 AM #

I am really admired for the great info is visible in this blog and using the great services in this blog

Reply

Stephane
Stephane
10/22/2011 9:31:23 AM #

hello there,

interresting, post here will came back
continue updating your blog

Reply

Btissam
Btissam
10/23/2011 11:58:33 AM #

hi,

Nice, post here

Reply

Eric
Eric
10/23/2011 7:26:12 PM #

hello there,

Nice, post here
Keep like this

Reply

Robert
Robert
10/23/2011 8:45:39 PM #

hi,

Nice, post here may come back soon
continue updating your blog

Reply

Lisa
Lisa
10/23/2011 10:52:06 PM #

Hello

Interresting post here may come back soon
Keep like this

Reply

Robert
Robert
10/24/2011 12:23:03 AM #

Hi

nice post here will came back

Reply

Eric
Eric
10/24/2011 12:24:15 AM #

Hi

nice post here may come back soon

Reply

disability lawyer
disability lawyer
10/24/2011 4:01:15 AM #

i so much enjoy with this blog readings and it looks like that this blog was very helpful,thank you for tagging this blog.

Reply

List of Social Bookmarking Sites
List of Social Bookmarking Sites
11/10/2011 7:36:17 AM #

This is such a good article. SEO may target different kinds of search, including image search, local search, video search, academic search,[1] news search and industry-specific vertical search engines.

Reply

List of Social Bookmarking Sites
List of Social Bookmarking Sites
11/10/2011 9:38:01 AM #

This is such a good article. SEO may target different kinds of search, including image search, local search, video search, academic search,[1] news search and industry-specific vertical search engines.

Reply

fort worth bankruptcy attorneys
fort worth bankruptcy attorneys
11/22/2011 6:52:49 AM #

many thanks again pauline ,you often make decent statements here, you could make serious money for your services ,please drop me a line thanks

Reply

iPhone games reviews
iPhone games reviews
12/1/2011 2:56:49 PM #

Good job  , amazing Post !!!

Reply

solar for business
solar for business United States
5/18/2015 3:07:37 PM #

I've been absent for a while, but now I remember why I used to love this website. Thank you, I'll try and check back more frequently. How frequently you update your web site?

Reply

photographe mariage paris
photographe mariage paris United States
6/8/2015 2:27:52 AM #

Thanks for your post. Another point is that to be a photographer requires not only difficulties in catching award-winning photographs but in addition hardships in acquiring the best camera suited to your needs and most especially situations in maintaining the grade of your camera. This can be very true and visible for those professional photographers that are directly into capturing the nature's exciting scenes - the mountains, the forests, the wild or the seas. Visiting these amazing places certainly requires a photographic camera that can meet the wild's tough area.

Reply

Philix
Philix United States
11/18/2015 9:13:12 PM #

Wonderful Website

Reply

philix
philix United States
11/18/2015 10:30:09 PM #

Superb Web Site.

Reply

philix
philix United States
11/19/2015 1:51:03 PM #

Nice Web Site.

Reply

philix
philix United States
11/20/2015 4:20:11 PM #

great site.

Reply

Philix
Philix United States
11/20/2015 5:56:00 PM #

Ace Site

Reply

Philix
Philix United States
11/22/2015 3:38:54 AM #

Nice Web Site

Reply

philix
philix United States
11/22/2015 9:46:53 PM #

Good Web Site

Reply

Philix
Philix United States
11/23/2015 1:58:07 AM #

Wonderful Site

Reply

Philix
Philix United States
11/27/2015 10:45:45 PM #

Superb Web Site.

Reply

Philix
Philix United States
11/27/2015 11:18:56 PM #

good web site.

Reply

backlinks google
backlinks google United States
12/14/2015 1:37:28 PM #

Insightful! Interesting! Quality! Prized possession! Famous! Great! Awesome! Simply all the great words apply to this material! If you keep up the good job, thank you from the base of my heart and spirit as well as I will come visit again!

Reply

Jinny Mccleese
Jinny Mccleese United States
1/6/2016 3:54:10 PM #

Congrats. And all of the items featured so far should be in the book.

Reply

Natividad Sluder
Natividad Sluder United States
1/13/2016 3:26:16 PM #

Printing out an essay or paper, reading the first line and realizing there aren't any mistakes.<br />AWESOME!

Reply

Rosario Carello
Rosario Carello United States
1/15/2016 4:13:13 AM #

Congrats! This is such a great website, I know it will translate well into book form. Which is AWESOME!

Reply

Freddy Stuart
Freddy Stuart United States
1/15/2016 4:15:22 AM #

I love the dolphin saving you one.

Reply

Marianne Babers
Marianne Babers United States
1/15/2016 4:51:28 AM #

Congrats. And all of the items featured so far should be in the book.

Reply

Solomon Trudics
Solomon Trudics United States
1/15/2016 4:58:18 AM #

getting the last pair of shoes in your size AWESOME!

Reply

Mitzi Towers
Mitzi Towers United States
1/15/2016 5:07:54 AM #

Congratulations on your success! You deserve it for brightening all of my work days with something to be excited about.

Reply

Marianne Babers
Marianne Babers United States
1/15/2016 5:33:07 AM #

Thaaaat IS awesome! lol hehe

Reply

Herbert Britson
Herbert Britson United States
1/15/2016 6:39:16 AM #

Hey, congratulations Neil. This site really is something special and it's been a pleasure to share it with my readership too. Looking forward to future awesome things, and I'll send any suggestions that are sufficiently awesome.

Reply

Deena Hofer
Deena Hofer United States
1/15/2016 6:58:50 AM #

getting the last pair of shoes in your size AWESOME!

Reply

Virgilio Schoel
Virgilio Schoel United States
1/15/2016 7:06:43 AM #

Congrats! So glad to see this site getting the recognition it deserves, the world can always use a little more awesome.

Reply

Christin Boxwell
Christin Boxwell United States
1/15/2016 7:14:31 AM #

Let me be the first to say: Congrats, Neil! I've been following this site from day one, and have loved every single day of awesomeness that it has delivered. You deserve all the success coming your way. Keep it up!AWESOME!

Reply

Normand Schwarz
Normand Schwarz United States
1/15/2016 7:44:45 AM #

I can't wait to read this masterpiece. Ordering off the menu at fast food restaurants and old dangerous playground equipment have to be in the book!

Reply

Isreal Payor
Isreal Payor United States
1/15/2016 7:51:06 AM #

Congrats. And all of the items featured so far should be in the book.

Reply

Loida Shaneyfelt
Loida Shaneyfelt United States
1/15/2016 8:20:45 AM #

Congratulations on your success! You deserve it for brightening all of my work days with something to be excited about.

Reply

Willie Goldkamp
Willie Goldkamp United States
3/17/2016 12:34:54 PM #

Is it high-quality in direction of vacation spot element of this on my particular person blog if maybe I submit a reference in the direction of this world-wide-web internet site?

Reply

high pr backlinks dofollow
high pr backlinks dofollow United States
4/3/2016 10:55:36 PM #

Legendary! This is simply awesome! Not simply top quality, however likewise useful information. And that is rare ahead by presentlies! I need to state that I am really satisfied and will definitely return once again if you keep up the quality as well as value of the material at this level, or maybe get it on the following degree. Regards, from all-time low of my heart, thanks for your time! God bless!

Reply

dating gay
dating gay United States
4/21/2016 10:29:58 PM #

Appreciate it so much for grant this facts. This is the most effective method for entertainment. These are one of the finest game & everybody is able to fully enjoy using these games. Considering that i am also play these games. Pray so these games will have a positive response this may let you good feedback just as well.</p><p>I spend considerable time for these type of games. Finally, Before at times I used to be installed. SoftMozer may be a free software download site offering

Reply

Dessie Bettini
Dessie Bettini United States
5/7/2016 8:42:31 AM #

Re: Whomever designed the comment that this was a very good website web-site definitely needs toward get hold of their mind examined.

Reply

link building expert
link building expert United States
5/12/2016 12:23:41 PM #

Just outstanding! I understand you have put a lot of effort right into this and also I desired to tell you just how grateful I am! Hope you put out also much more incredible things in the close to future and I will certainly come back and review it!

Reply

pożyczki pozabankowe
pożyczki pozabankowe United States
6/23/2016 7:56:47 AM #

Pożyczka pozabankowa Net Credit

Reply

POŻYCZKA POZABANKOWA
POŻYCZKA POZABANKOWA United States
6/23/2016 7:56:50 AM #

POŻYCZKA POZABANKOWA

Reply

POŻYCZKI POZABANKOWE
POŻYCZKI POZABANKOWE United States
6/23/2016 8:01:15 AM #

POŻYCZKI POZABANKOWE

Reply

POŻYCZKA POZABANKOWA
POŻYCZKA POZABANKOWA United States
6/23/2016 8:03:10 AM #

Weź bezpłatną pożyczkę    Gotówka na koncie w czasie nawet do 15 minut     Pożycz do 2000 złotych

Reply

POŻYCZKA POZABANKOWA
POŻYCZKA POZABANKOWA United States
6/23/2016 8:03:13 AM #

Pożyczka gotówkowa Alior Bank

Reply

POŻYCZKA
POŻYCZKA United States
6/23/2016 8:03:26 AM #

pożyczki pozabankowe

Reply

pożyczki pozabankowe
pożyczki pozabankowe United States
6/23/2016 8:08:55 AM #

Weź bezpłatną pożyczkę    Gotówka na koncie w czasie nawet do 15 minut     Pożycz do 2000 złotych

Reply

pożyczka pozabankowa
pożyczka pozabankowa United States
6/23/2016 8:13:42 AM #

POŻYCZKA POZABANKOWA

Reply

pożyczki
pożyczki United States
6/23/2016 8:19:06 AM #

Pożyczka gotówkowa Wonga

Reply

POŻYCZKI POZABANKOWE
POŻYCZKI POZABANKOWE United States
6/23/2016 8:19:07 AM #

pożyczki pozabankowe

Reply

pożyczka pozabankowa
pożyczka pozabankowa United States
6/23/2016 8:20:06 AM #

Pożyczka gotówkowa Soho Credit

Reply

pożyczka
pożyczka United States
6/23/2016 8:20:07 AM #

POŻYCZKA POZABANKOWA

Reply

POŻYCZKA POZABANKOWA
POŻYCZKA POZABANKOWA United States
6/23/2016 8:20:08 AM #

Pożyczka gotówkowa Alior Bank

Reply

POŻYCZKI POZABANKOWE
POŻYCZKI POZABANKOWE United States
6/23/2016 8:31:42 AM #

Pożyczka gotówkowa Alior Bank

Reply

pożyczka
pożyczka United States
6/23/2016 8:31:42 AM #

POŻYCZKI POZABANKOWE

Reply

pożyczka
pożyczka United States
6/23/2016 8:33:33 AM #

POŻYCZKA POZABANKOWA

Reply

POŻYCZKI
POŻYCZKI United States
6/23/2016 8:43:15 AM #

Pożyczka gotówkowa Wonga

Reply

POŻYCZKI POZABANKOWE
POŻYCZKI POZABANKOWE United States
6/23/2016 9:44:24 AM #

Pożyczka gotówkowa Alior Bank

Reply

Rejestracja Domen
Rejestracja Domen United States
6/25/2016 5:59:45 AM #

Rejestracja domen - Przedłużanie domen - Transfer domen

Reply

domeny
domeny United States
6/25/2016 5:59:47 AM #

Bezpłatna rejestracja domen

Reply

rejestracja domen
rejestracja domen United States
6/25/2016 5:59:51 AM #

Odzyskiwanie domen

Reply

Rejestracja Domen
Rejestracja Domen United States
6/25/2016 6:09:03 AM #

Odzyskiwanie domen

Reply

REJESTRACJA DOMEN
REJESTRACJA DOMEN United States
6/25/2016 6:09:05 AM #

Zamówienie domeny

Reply

Rejestracja Domen
Rejestracja Domen United States
6/25/2016 6:09:06 AM #

Rezerwacja domen Rejestracja domen

Reply

Rejestracja Domen
Rejestracja Domen United States
6/25/2016 6:09:07 AM #

Transfer domen

Reply

REJESTRACJA DOMEN
REJESTRACJA DOMEN United States
6/25/2016 6:09:09 AM #

Transfer domen

Reply

domeny
domeny United States
6/25/2016 6:13:36 AM #

Odzyskiwanie domen

Reply

domeny
domeny United States
6/25/2016 6:15:25 AM #

Rejestracja Domen

Reply

DOMENY
DOMENY United States
6/25/2016 6:15:37 AM #

Bezpłatna rejestracja domen

Reply

domeny
domeny United States
6/25/2016 6:20:35 AM #

rejestracja domen

Reply

DOMENY
DOMENY United States
6/25/2016 6:25:25 AM #

Rejestracja domen - Przedłużanie domen - Transfer domen

Reply

REJESTRACJA DOMEN
REJESTRACJA DOMEN United States
6/25/2016 6:30:16 AM #

Rejestracja domen - Przedłużanie domen - Transfer domen

Reply

rejestracja domen
rejestracja domen United States
6/25/2016 6:30:18 AM #

Zamówienie domeny

Reply

REJESTRACJA DOMEN
REJESTRACJA DOMEN United States
6/25/2016 6:31:07 AM #

Rejestracja Domen

Reply

Rejestracja Domen
Rejestracja Domen United States
6/25/2016 6:31:09 AM #

Rejestracja domen - Przedłużanie domen - Transfer domen

Reply

REJESTRACJA DOMEN
REJESTRACJA DOMEN United States
6/25/2016 6:31:12 AM #

Rejestracja domen - Przedłużanie domen - Transfer domen

Reply

Rejestracja Domen
Rejestracja Domen United States
6/25/2016 6:31:13 AM #

Zamówienie domeny

Reply

DOMENY
DOMENY United States
6/25/2016 6:42:19 AM #

Bezpłatna rejestracja domen

Reply

domeny
domeny United States
6/25/2016 6:42:19 AM #

Odzyskiwanie domen

Reply

rejestracja domen
rejestracja domen United States
6/25/2016 6:44:10 AM #

Odzyskiwanie domen

Reply

rejestracja domen
rejestracja domen United States
6/25/2016 6:53:28 AM #

Odzyskiwanie domen

Reply

REJESTRACJA DOMEN
REJESTRACJA DOMEN United States
6/25/2016 8:07:24 AM #

Zamówienie domeny

Reply

Junie Volpi
Junie Volpi United States
7/19/2016 9:43:17 AM #

"Hi there! This is my first comment here so I just wanted to give a quick shout out_ and tell you I genuinely enjoy reading through your posts. Can you recommend any other blogs/websites/forums that deal with the same topics?"

Reply

Edmond Inklebarger
Edmond Inklebarger United States
7/26/2016 5:47:05 PM #

Si la solicitas a cualquiera de nuestros Servicios Técnicos Oficiales en Palma te la pueden suministrar y, si en ese momento no la tienen en stock, nos la piden y en unos días ya tienes ahí. Parece que algún momento ha debido haber algún malententido con el Servicio Técnico de Reyes Católicos porque la pieza en cuestión la tienen en stock y, por tanto, se puede proceder enseguida a la reparación de la cafetera. He llamado a los SAT que aparecen en la página web y menos dos que no he podido hacerlo por tener horario de mañanas, los demás me han contestado que no trabajan esta marca.

Reply

En esta nueva propuesta, La madre del Capitán Garfio visita a su hijo con el firme propósito de cumplir su sueño. Un marciano en La Boca Primero llegaron los italianos, después los polacos, los gallegos, la niña huérfana y los niños traviesos. El estreno del Grupo Kukla Música Maestro” - Títeres, actores, teatro negro y efectos de láser y luz robótica. Mientras el alcalde y sus funcionarios esperan aterrorizados la visita de un inspector general. Todas las semanas se escuchará un disco diferente, en completísima oscuridad, mediante la tecnología holofónica de Hugo Zuccarelli La Holofonía llega más al cerebro que al oído. Tras un mes de uso se averio y tuve que recurir al mediocre servicio de asistencia.

Reply

Scott Kevin
Scott Kevin United States
8/5/2016 6:34:20 PM #

Представляем новый веб- сайт знакомств будет оштрафован на широкий свою настоящую любовь в http://youllfindlove.com/

Reply

Corrinne Uzelac
Corrinne Uzelac United States
8/25/2016 4:19:59 AM #

Great post but I was wanting to inquire if you could write a litte more on this subject? I’d be very grateful if you could detail it a little bit more. Appreciate it!

Reply

Lashaunda Dechavez
Lashaunda Dechavez United States
9/9/2016 10:26:18 AM #

My first experience with my Credit Union was in 2010. At the time, I was working over 30 miles away from my home, and need cash bad. I call them and they were able to wire funds immediately to a local place. The customer service was awesome.

Reply

Adalberto Plummer
Adalberto Plummer United States
9/9/2016 11:06:49 AM #

I am especially proud because credit unions are not-for-profit organization that exists to serve their membership rather than shareholders whom seek maximize profit through fees and services. I just love my Credit Union.

Reply

Buford Frenz
Buford Frenz United States
9/13/2016 2:11:24 PM #

Have been a member for several years now. The online banking site is outstanding, full featured and easy to use. So much so in fact that I seldom have the need to visit a physical branch. Past interactions with representatives have all been positive experiences.

Reply

August Fells
August Fells United States
9/20/2016 4:16:40 PM #

My first experience with my Credit Union was in 2003. At the time, I was working over 30 miles away from my home, and need cash bad. I call them and they were able to wire funds immediately to a local place. The customer service was awesome.

Reply

James Fly
James Fly United States
9/26/2016 8:04:58 PM #

Это такой хороший сайт с большим количеством полезной информации . Приходите присоединиться к нашему новый бесплатный социальный сайт, как Facebook . У нас есть группы друзей , объявления, сайт знакомств играть в игры бесплатно для всех на http://mysocialspot.ca/

Reply

Pingbacks and trackbacks (1)+

Add comment

biuquote
  • Comment
  • Preview
Loading

Rel=Me

Month List

RecentComments

Comment RSS