2016-10-22 18 views
3

重複するエントリをXMLファイルに制限しようとしていますが、その下にXMLファイルがあります。今xmlファイルに重複するエントリを避けるC#

<?xml version="1.0" standalone="yes"?> 
<Info> 
<Details> 
<ID>Ryan</ID> 
</Details> 
<Details> 
<ID>Danny</ID> 
</Details> 
</Info> 

私は、ユーザー名がすでに存在しているように私は警告しなければならないIDに再びライアンやダニーを追加しようとした場合。

私は以下のコードを使用していますが、動作しません。 strNameは文字列であり、追加するユーザー名の値を持っています。誰でも提案を提供できますか?

XDocument xDoc = XDocument.Load(Server.MapPath("~/Info.xml")); 
bool userExistsAlready = xDoc.Descendants("Details").Any(x => (string)x.Attribute("ID") == strName); 
if (userExistsAlready) 
{ 
    //alert 
} 

答えて

1

この方法を試してみてください:

bool userExistsAlready = xDoc.Descendants("Details") 
          .Elements("ID") 
          .Any(x => x.Value == "Ryan"); 

はあなたのコードの問題は、それが属性IDにアクセスしようとしていることです。しかし、IDは実際には要素<Details>の中に含まれる別のXML要素です。

+0

どのようにすれば、「department」という別の要素と条件を調べることができますか?私はいくつかのコードを試してみることができませんでした。 – vicky

+0

bool usertExists = xDocss.Descendants( "詳細")要素( "ID")任意の(x => x.Value ==名前)&& xDocss.Descendants( "詳細")要素( "パスワード")。 (y => y.Value == Pwd); – vicky

+0

@vickyもう、別の質問です。コメントの質問にはお答えできません。関連するXMLファイルで別の投稿を書いてみてください。 –

0

IDをDetailsの属性として設定し、XmlDocumentメソッドGetElementByIDを使用してそのエントリが存在するかどうかを確認するか、またはGetElementsByNameメソッドの呼び出しの結果として配列の各要素のInnerTextプロパティをチェックするforサイクルを実装します。 。

関連する問題