からの読み取り私はこのようなxmlファイルがあります。xmlファイル
<?xml version="1.0" encoding="utf-8" ?>
<LogOnUsersInfo>
<GeneralInformation>
<NumberOfUsers>2</NumberOfUsers>
<LastUser UserName="User1"/>
</GeneralInformation>
<LogOnUserCollection>
<LogOnUser UserName="User1" Password="password">
<Rights>
<CanCreateProducts value="true"/>
<CanEditProducts value="true"/>
<CanDeleteProducts value="true"/>
<CanCreateLogIns value="true"/>
<CanDeleteLogIns value="true"/>
<CanBeDeleted value="true"/>
<HasDebugRights value="false"/>
</Rights>
</LogOnUser>
<LogOnUser UserName="User2" Password="password">
<Rights>
<CanCreateProducts value="true"/>
<CanEditProducts value="true"/>
<CanDeleteProducts value="true"/>
<CanCreateLogIns value="true"/>
<CanDeleteLogIns value="true"/>
<CanBeDeleted value="true"/>
<HasDebugRights value="false"/>
</Rights>
</LogOnUser>
</LogOnUserCollection>
</LogOnUsersInfo>
をそして、私は言ったxmlファイル内の値と一致するプロパティを持つクラスがあります。私が試した
public class LogOnUser
{
#region NestedTypes
public class Rights
{
public bool CanCreateProducts { get; set; }
public bool CanEditProducts { get; set; }
public bool CanDeleteProducts { get; set; }
public bool CanCreateLogIns { get; set; }
public bool CanDeleteLogIns { get; set; }
public bool CanBeDeleted { get; set; }
public bool HasDebugRights { get; set; }
};
#endregion
#region Members
string _UserName;
string _Password;
bool _LoggedIn;
Rights _UserRights;
#endregion
#region Construction
public LogOnUser() { }
public LogOnUser(string username)
{
_UserName = username;
}
public LogOnUser(string username, string password, bool cancreateproducts, bool caneditproducts, bool candeleteproducts, bool cancreatelogins, bool candeletelogins)
{
_UserName = username;
_Password = password;
_UserRights = new Rights();
_UserRights.CanCreateProducts = cancreateproducts;
_UserRights.CanEditProducts = caneditproducts;
_UserRights.CanDeleteProducts = candeleteproducts;
_UserRights.CanCreateLogIns = cancreatelogins;
_UserRights.CanDeleteLogIns = candeletelogins;
}
#endregion
#region Properties
public string Username
{
get { return _UserName; }
set { _UserName = value; }
}
public string Password
{
get { return _Password; }
set { _Password = value; }
}
public bool LoggedIn
{
get { return _LoggedIn; }
set { _LoggedIn = value; }
}
public Rights UserRights
{
get { return _UserRights; }
set { _UserRights = value; }
}
#endregion
}
をXDocumentを使用してxmlファイルの特定の値をLogOnUserクラスのインスタンスに読み込むことはできますが、私はちょっと立ち往生してしまい、MSDNのドキュメントを辿って、探しているものが見つからない場合は、ここで質問をする。
まず、UserName
フィールドをXMLのUserName
プロパティのLogOnUser
オブジェクトに読み込もうとしました。しかし、これは「LogOnUsersInfo」へUserName
を設定し
var XMLUser = XElement.Load(LogOnUserXMLFilePath);
foreach(XElement e in XMLUser.DescendantsAndSelf())
{
var user = new Model.LogOnUsers.LogOnUser(e.Name.ToString());
}
ので、明らかに私はXMLに深く行く必要があるが、私は方法がわからない:私はこれを試してみました。
誰でも正しい方向に向けることができますか?
foreach(XElement e in XMLUser.Descendants("LogOnUser"))
{
var user = new Model.LogOnUsers.LogOnUser((string)e.Attribute("UserName"));
}
基本的に、あなたはXMLツリーに深い任意のレベルをダウンするDescendants()
を使用することができ、およびXML属性にアクセスするためにAttribute()
を使用します。
完璧、ありがとう!どのようにして別のユーザーを検索するのですか?明らかに今私は2つだけ持っているが、それはかなりより多くなる可能性がある。ユーザーの名前を検索するか、たとえばユーザー名を検索する必要がありますか?あるいは、各ユーザの要素名を変更するほうが簡単なのでしょうか?オープンタグとして 'LogOnUser'を持っているのではなく、それぞれが異なっていますか? –
私はあなたを正しく理解すれば、前者がより一般的なアプローチです。同じ種類の情報を持つXML要素に異なるタグ名を使用する、つまりユーザーがXMLを非常に厄介にする – har07
特定のユーザーを見つけることは 'Where() 'を追加するだけで簡単です。 'XMLUser.Descendants( "LogOnUser")。ここで(o =>(文字列)o.Attribute( "UserName")== "User2") ' – har07