1

使用する言語の少なくとも1つ(できればこれはWebMatrix C#)でXMLを使用する(具体的には読むだけ)方法を知る必要がありますが、過去にJavaScriptでこれを数回試みましたが、オンラインの例はありません(StackOverflowなどで)それを機能させるのに十分なほど完全です(実際のXMLの経験がないことを覚えておいてください。もちろん、XPathやXMLなどの簡単なチュートリアルを実行しましたが、どれほど簡潔でこれらのチュートリアルは不完全である可能性があります)。

サーバー側での処理は管理が簡単で、ユーザーにとっては高速であるように思われるため、WebMatrix C#でこれを実行したいと思います。

このコードを使用してオンラインで提供された例のいくつかを使用しようとしたとき:

@using System.Xml.Linq
@{
    var file = XDocument.Load(Server.MapPath(@"/App_Code/Test.xml"));
    var results = from e in file.Root.Elements() 
       select new { Name = e.Element("someValue").Value, Sales = e.Element("someValueTwo").Value };
    var grid = new WebGrid(results);
}

(実際にはWebGridを使用する必要はありません。これは単なる例です)そして、Test.xmlという名前のApp_Codeフォルダーに保存されたテストxmlドキュメント。

xmlドキュメント内の2つのフィールドからいくつかのテスト値を読み取ろうとするとエラーが発生します。テストxmlドキュメントは次のとおりです。

<?xml version="1.0" encoding="utf-8" ?>
<someNode>
    <someValue>HEY THERE! I'M XML!</someValue>
    <someValueTwo>Another Value</someValueTwo>
</someNode>

そして、ここで、cshtmlファイルのさらに下のページに値を呼び出そうとします。

    <p>This should be a fun test!<br/>And the value is...:
        @foreach(var f in results)
        {
            <div>@f.Name</div>
            <div>@f.Sales</div>
        }
    </p>

最後に、ページを実行したときに発生するエラーは次のとおりです(このテストまたはxmlの使用に関連する他のデータ、コード、またはファイルはサイトのどこにも存在しないことに注意してください)。

Object reference not set to an instance of an object.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error: 


Line 4:      var file = XDocument.Load(Server.MapPath(@"/App_Code/Test.xml"));
Line 5:      var results = from e in file.Root.Elements() 
Line 6:         select new { Name = e.Element("someValue").Value, Sales = e.Element("someValueTwo").Value };
Line 7:      var grid = new WebGrid(results);
Line 8:  }

(6行目はエラーが発生した行です)

私は何が欠けていますか?例は、実際にはこれほど単純であるように動作しますが、わかりません。そうではない。

正直なところ、XMLを使用せずに目的を達成するためにWebMatrixについて十分に学びました(データベースを使用したり、ページをレンダリングしたりすることもできます)が、このマークアップ言語に飽き飽きしています。私が使用しているどの言語(JavaScript、jQuery、C#)でもXMLファイルから読み取ることができないという理由だけで。

4

1 に答える 1

2

XmlDocument、、XmlNodeおよびXmlNodeListクラスを使用し、XPathを使用して必要な要素を指定することで、はるかに多くの成功を収めていることがわかりました。ただし、これには、XMLファイルの構造についてある程度の知識が必要です。

var file = XmlDocument.Load(Server.MapPath(@"/App_Code/Test.xml"));
var results = file.SelectNodes("someNode/*")

これは、のすべてのサブノードを含むように設定resultsされます。XmlNodesとして反復処理できます。次に、各ノードで、サブノードを取得するために2行目で使用されているものと同様のXPathクエリを実行できます。XmlNodeListsomeNoderesultsList

XPath構文: http: //msdn.microsoft.com/en-us/library/aa926473.aspx

以下について、VB.netの代わりにC#を使用して申し訳ありませんが、foreachのVBの構文に精通していません。

foreach(XmlNode aNode in results){
  string value = aNode.InnerText
}

「HEYTHERE!I'MXML!」が表示されます someValueノード用。\

編集:以下のコメントでリンクした内容に基づいて、これを試してください:

@using System.Xml.Linq
@{
    var file = XmlDocument.Load(Server.MapPath(@"/App_Code/Test.xml"));
    var results = file.SelectNodes("someNode/*");
       select new { Name = e.Element("someValue").Value, Sales = e.Element("someValueTwo").Value };
    /*Do something with each node*/
    foreach(XmlNode aNode in results)
    {
       string value = aNode.InnerText
    }
}
于 2012-10-31T16:39:55.440 に答える