0

こんにちは私は次のようにやっています

 XDocument xmlDoc = XDocument.Load(@"F:\test2.xml");
        var q = from c in xmlDoc.Descendants("autoivr.ok")
                where c.Element("LS_CZIP4").Value == "1234"
                select new
                {
                    name = c.Element("LS_LIN").Value,
                    state = c.Element("LS_STATE").Value                        
                };

where c.attribute( "LS_CZIP4")。Value == "1234"を使用すると、オブジェクト参照が設定されていないというエラーが発生しますが、c.elementを使用するとそのようなエラーは発生しません。

以下は私が作成したxmlで、実際にはxmlファイルに変換されたSQLのテーブルです。

<?xml version="1.0" standalone="yes"?>
<DocumentElement>
   <autoivr.ok>
      <LS_LIN>abc</LS_LIN>
      <LS_STATE>def</LS_STATE>
      <LS_TYPE>5</LS_TYPE>
      <LS_CZIP4>1234</LS_CZIP4>
   <priority>0</priority>
   </autoivr.ok>

誰かが問題を教えてもらえますか、どうすれば解決できますか?属性の代わりに要素タグのみを使用できますか?ありがとうございました

4

1 に答える 1

2

プロパティにアクセスする代わりにキャストを使用しValueます。文字列にキャストすると、存在しない要素に対してnullが返されます。取得Valueすると例外がスローされます

XDocument xmlDoc = XDocument.Load(@"F:\test2.xml");
var q = from c in xmlDoc.Descendants("autoivr.ok")
        where (string)c.Element("LS_CZIP4") == "1234"
        select new
        {
            name = (string)c.Element("LS_LIN"),
            state = (string)c.Element("LS_STATE")
        };

ところで、の終了タグが必要です<DocumentElement>。またLS_CZIP4、属性ではなく要素です。ここでXML要素と属性の違いを参照してください。

エレメント:<LS_LIN>abc</LS_LIN>

属性:<autoivr.ok LS_LIN="abc">

于 2013-01-16T09:44:18.370 に答える