0

XML から特定のノードを取得するための LINQ クエリを作成するのに問題があります。誰かが助けてくれることを願っています。XML は次のとおりです。

<EmpFieldsMap>
<Field>
  <Name insert = "false">EmpNumber</Name>  
</Field>
<Field>
  <Name insert = "true">EmpName</Name>
</Field>
<Field>
  <Name insert = "true">EmpLocation</Name>
</Field>
<Field>
  <Name update = "false">EmpAddress1</Name>
</Field>
<Field>
  <Name update = "false">EmpAddress2</Name>
</Field>
<Field>
</EmpFieldsMap>

ご覧のとおり、一部のNameタグには属性insertがあり、他のタグにはupdate属性があります。

insert属性を持たず、insertasを持つタグを取得する必要がありますtrue。、、、およびInsertCollectionが必要であることを意味します。EmpNameEmpLocationEmpAddress1EmpAddress2

このコード:

var titles = from nameTag in xml.Element("EmpFieldsMap").Elements("Field")
             let insert = nameTag.Attribute("insert") ?? new XAttribute("insert","true")
             where insert.Value == "true"
             select nameTag.Element("Name").Value;

Fieldを無視して、5 つのタグ値すべてを指定します。Where

私は何が欠けていますか?

4

2 に答える 2

3

これは、数値 (0/1) とテキスト (true/false) の両方の属性値XAttributeにキャストでき、正しい bool 値を返すことを知っておく必要があります。bool

私はこれを試してみます:

titles = from nameTag in xml.Element("EmpFieldsMap").Elements("Field")
         let insert = nameTag.Element("Name").Attribute("insert")
         where insert == null || (bool)insert
         select nameTag.Element("Name").Value;

フィールド要素の挿入属性を取得しようとしていますが、これは常に何もありません。最初の行で要素を確認nameTag.Element("Name").Attribute("insert")または取得する必要があります。Name

于 2013-02-20T06:53:51.220 に答える
1

このようにしてみてください

titles = (from nameTag in xml.Element("EmpFieldsMap").Elements("Field"))
         .Where ( el=> (el.Attribute("insert").Value.Equals("true") )  ||
                        (el.Attribute("update").Value.Equals("false") )
         Select(f => new 
            {
                Text = nameTag.Element("Name").Value
             });
于 2013-02-20T06:57:57.960 に答える