2

ネストされたXElementの値を取得するために、コードに次のものがあります。

XElement xml = new XElement("UserDefinedSettings", new XElement("RootFolder", new XElement("FolderName", "User Input Goes Here")));

xml.Save("UserDefinedSettings.xml");

これにより、これがハードドライブに保存されます。

<?xml version="1.0" encoding="utf-8"?>
<UserDefinedSettings>
  <RootFolder>
    <FolderName>User Input Goes Here</FolderName>
  </RootFolder>
</UserDefinedSettings>

後で、ユーザーが選択したフォルダーの名前を取得するには、次のようにします。

XDocument xdoc = XDocument.Load("UserDefinedSettings.xml");

var myVar = xdoc.Descendants("FolderName").Single();

textBox1.Text = myVar.Value;

私はLinq-XMLを初めて使用しますが、私が行ったことはそれを実行する正しい方法であるかどうか疑問に思っています。

最初は次のコード行を使用してフォルダーの名前を取得していましたが、もっと良い方法が必要であることがわかりました。ここでSOを検索した後、代わりに上記のコードを使用しています。

string s =xdoc.Element("UserDefinedSettings").Element("RootFolder").Element("FolderName").Value;
4

2 に答える 2

3

それらの要素が存在することが確実である限り、あなたが持っているものは(新しい方法で)うまくいくはずです。ただし、null参照例外が存在しない場合は、例外をスローするリスクがあります。私は通常、Element()ではなくElements()を使用してクエリを実行します。Elements()はIEnumerableを返します。これは、より多くのElements()クエリ(またはその他)と安全にチェーンできます。たとえば、次のことを検討できます。

var folder = (string)xdoc.Elements("UserDefinedSettings").Elements("RootFolder").Elements("FolderName").FirstOrDefault();

属性または要素からの値が必要なときに私が通常行うもう1つのことは、上記のようにXElementsとXAttributesを文字列でキャストすることです。文字列としてキャストされたnull値は、null文字列を返し、.Value呼び出しで発生するnull参照例外を防ぎます。

于 2012-11-19T23:44:24.550 に答える
2

また動作します:

xdoc.XPathSelectElement("/UserDefinedSettings/RootFolder/FolderName").Value

簡潔にするためにXPathを使用することを好みますが、それはあなたの選択です。

于 2012-11-20T00:08:54.163 に答える