私はC#のURLからxmlをロードしようとしていますが、xslがxmlファイルに添付されています。つまり、取得できませんxmlファイルの内容ですが、xslを使用して変換されたhtmlです。URLからxmlをスタイリングせずにC#
最初に変換せずにxmlをロードする方法はありますか?xmlの内容を取得するだけですか?
私はC#のURLからxmlをロードしようとしていますが、xslがxmlファイルに添付されています。つまり、取得できませんxmlファイルの内容ですが、xslを使用して変換されたhtmlです。URLからxmlをスタイリングせずにC#
最初に変換せずにxmlをロードする方法はありますか?xmlの内容を取得するだけですか?
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);
}
私は、彼らがそれをやっているなぜ私はあなたを伝えることがしたい、そしてなぜこのユーザエージェントが動作します他の人はそうではありませんが、私の専門分野の外には少しあります。たぶん誰かがこれについていくつかの光を当てることができます。
サーバーがファイルを提供する前にファイルを変換する場合は、変換したバージョンのみを取得できます。ただし、XSLスタイルシートを参照する処理命令のみが指定され、ブラウザがそれを変換する場合は、デフォルトでXMLが取得されます。
xslはxmlで次のように指定されています:<?xml-stylesheet type = "text/xsl" href = "/ layout/style/sheet.xsl"?> これはxml変換されたバージョンではありませんか?その場合、XmlDocument.Load()を使ってロードできないはずですか? – Tuvix
もちろん、XMLを取得します。 'XmlDocument'は自動的に何も変換しません。 –
HttpWebRequestオブジェクトのAcceptプロパティを "text/xml"に設定しようとしましたか?
このプロパティは、変換されたXMLと元のXMLを比較するのに違いがありますか? –
Acceptプロパティは、HTTP要求内のAcceptヘッダーの値を表します。これは、あなたが受け入れる/希望するMIMEタイプと、複数の選択肢が利用可能であるという条件を定義します。デフォルトでは、リクエストオブジェクトはtext/HTMLを好んでおり、応答するWebサーバーがその好みに対応している可能性があります。私は、サーバーの応答を変更する可能性のあるオフチャンスで、XMLに優先順位を設定することを提案していました。 – MyItchyChin
HttpWebRequestオブジェクトを使用してacceptプロパティをtext/xmlに設定すると、同じ結果が得られます。 – Tuvix
これは試しましたか?トランスフォームの実行を見たことがありますか? –
私はこのコードを使用しました: 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