1

XML ファイルに対する linq クエリで、少し混乱した問題が発生しています。ノードの 1 つを属性値で正しく返します ( GB)。ただし、たとえば、別の属性値をJE指定すると、sequence contains no elementsエラーが表示されますが、要素は XML ドキュメントに明確に存在しますか?

これは私のクエリです:

return (from n in xml.Descendants("postalCodeData")
        where n.Element("postCodeRegex").Attribute("territoryId").Value == isoCode
        select n.Element("postCodeRegex").Value).Single().ToString();

サンプルの XML データを次に示します。

<postalCodeData>
  <postCodeRegex territoryId="GB" >GIR[ ]?0AA|((AB|AL|B|BA|BB|BD|BH|BL|BN|BR|BS|BT|CA|CB|CF|CH|CM|CO|CR|CT|CV|CW|DA|DD|DE|DG|DH|DL|DN|DT|DY|E|EC|EH|EN|EX|FK|FY|G|GL|GY|GU|HA|HD|HG|HP|HR|HS|HU|HX|IG|IM|IP|IV|JE|KA|KT|KW|KY|L|LA|LD|LE|LL|LN|LS|LU|M|ME|MK|ML|N|NE|NG|NN|NP|NR|NW|OL|OX|PA|PE|PH|PL|PO|PR|RG|RH|RM|S|SA|SE|SG|SK|SL|SM|SN|SO|SP|SR|SS|ST|SW|SY|TA|TD|TF|TN|TQ|TR|TS|TW|UB|W|WA|WC|WD|WF|WN|WR|WS|WV|YO|ZE)(\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}))|BFPO[ ]?\d{1,4}</postCodeRegex>
  <postCodeRegex territoryId="JE" >JE\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}</postCodeRegex>
  <postCodeRegex territoryId="GG" >GY\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}</postCodeRegex>
</postalCodeData>

ここで私が間違ったことを誰かが見つけることができますか? なぜこれが機能し、他の人には機能GBしないのですか?

4

2 に答える 2

2
n.Element("postCodeRegex") 

そのタイプの最初の要素を返し、その「territoryId」のみが検査されます。

代わりに、where 句を this に置き換えます。

 where n.Elements("postCodeRegex").Any(element=>element.Attribute("territoryId").Value == isoCode)

編集:わかりました。一致する郵便番号正規表現アイテムが必要でした。マッチにバンドルされた最初の要素が必要だと思いました。その後、解決策ははるかに簡単です。

return (from n in xml.Descendants("postCodeRegex")
  where n.Attribute("territoryId").Value == isoCode
  select n.ToString();
于 2013-06-21T15:38:21.537 に答える
0

解決しました。最初に一致した要素に対してのみチェックしていました。

return (from n in xml.Descendants("postalCodeData").Elements("postCodeRegex")
        where n.Attribute("territoryId").Value == isoCode
        select n.Value).Single().ToString();
于 2013-06-21T15:48:37.787 に答える