2009-08-05 6 views
0

私はC#のURLからxmlをロードしようとしていますが、xslがxmlファイルに添付されています。つまり、取得できませんxmlファイルの内容ですが、xslを使用して変換されたhtmlです。URLからxmlをスタイリングせずにC#

最初に変換せずにxmlをロードする方法はありますか?xmlの内容を取得するだけですか?

+0

これは試しましたか?トランスフォームの実行を見たことがありますか? –

+0

私はこのコードを使用しました: XmlTextReader myReader = new XmlTextReader( "http://eu.wowarmory.com/character-sheet.xml?r=Stormreaver&n=Sebassis"); myReader.XmlResolver = null; XmlDocument mySourceDoc = new XmlDocument(); mySourceDoc.Load(myReader); myReader.Close(); これは、Visual Studioでそれをデバッグするときにエラーが発生し、myReaderの値にはxmlではなくhtmlが含まれています。 – Tuvix

答えて

2

URLに「.xml」が含まれていても、サーバーからXMLが送信されるわけではありません。あなたの例で提供したURLの場合、サーバーはXHTMLを送信します。 (私はまた、そのファイルのあなたのコメントで言及したxml-stylesheet処理指令を見ていないので、あなたは2つの異なることを見ているのだろうかと思っています。)クライアントサイドでは何もできません。サーバーから生のXMLを取得するためにURLを定式化する方法がある場合、そのサイトには記載されていません。

XHTMLは、整形式のXMLではないようです(解析しようとするとどうなるかを判断する)。それはあまりいいことではありません。

編集:

わかりましたので、ここでの犯人は、このサイトは明らかにそれがXMLやHTMLを送信するかどうかを判断するためにユーザーエージェントをチェックするということです。答えhereは(?どんな理由を、祈り、StackOverflowの上でマーティンHonnenではない)それを行う方法を示しています。

string url = "http://eu.wowarmory.com/character-sheet.xml?r=Stormreaver&n=Sebassis"; 

    HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(url); 
    httpRequest.UserAgent = @"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"; 

    using (HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse()) 
    { 
     XmlDocument xmlDocument = new XmlDocument(); 
     xmlDocument.Load(httpResponse.GetResponseStream()); 
     Console.Write(xmlDocument.OuterXml); 
    } 

私は、彼らがそれをやっているなぜ私はあなたを伝えることがしたい、そしてなぜこのユーザエージェントが動作します他の人はそうではありませんが、私の専門分野の外には少しあります。たぶん誰かがこれについていくつかの光を当てることができます。

+0

私はNotepad ++でXMLを開こうとしました。私がこれを行うとき、私は実際のXMLを取得し、変換結果は取得しません。これは、xml-stylesheet処理ディレクティブを見た場所でもあります。だからこそ、私はなぜXMLを.Netから開くことができないのか分かりません。 – Tuvix

+0

それはそれをしました!助けてくれてありがとうございました。 – Tuvix

0

サーバーがファイルを提供する前にファイルを変換する場合は、変換したバージョンのみを取得できます。ただし、XSLスタイルシートを参照する処理命令のみが指定され、ブラウザがそれを変換する場合は、デフォルトでXMLが取得されます。

+0

xslはxmlで次のように指定されています:<?xml-stylesheet type = "text/xsl" href = "/ layout/style/sheet.xsl"?> これはxml変換されたバージョンではありませんか?その場合、XmlDocument.Load()を使ってロードできないはずですか? – Tuvix

+0

もちろん、XMLを取得します。 'XmlDocument'は自動的に何も変換しません。 –

0

HttpWebRequestオブジェクトのAcceptプロパティを "text/xml"に設定しようとしましたか?

+0

このプロパティは、変換されたXMLと元のXMLを比較するのに違いがありますか? –

+0

Acceptプロパティは、HTTP要求内のAcceptヘッダーの値を表します。これは、あなたが受け入れる/希望するMIMEタイプと、複数の選択肢が利用可能であるという条件を定義します。デフォルトでは、リクエストオブジェクトはtext/HTMLを好んでおり、応答するWebサーバーがその好みに対応している可能性があります。私は、サーバーの応答を変更する可能性のあるオフチャンスで、XMLに優先順位を設定することを提案していました。 – MyItchyChin

+0

HttpWebRequestオブジェクトを使用してacceptプロパティをtext/xmlに設定すると、同じ結果が得られます。 – Tuvix

関連する問題