XMLファイルにドット表記を書き込む方法は?
質問
XMLWriterを使用してC#でXMLファイルを書いています。使用して要素を書くことができます WriteStartElement()
方法と私はこの要素に属性を追加することができます WriteAttributeString()
方法。しかし、ドット表記を使用して属性を追加したい場合は、それを行う方法は?
<Element Attribute1="Value">
<Element.Attribute2> //How can i add attribute in this Notation.
//Add Value of Attribute2
</Element.Attribute2>
</Element>
私は電話できることを知っています WriteStartElement("Element.Attribute")
しかし、私はよりクリーンなアプローチを探しています。これを行う他の方法はありますか?
編集1:
階層的な(ツリーの形で)オブジェクト(OBJなど)があり、このツリーの各ノードには、さらにノードを含む可能性のあるプロパティがあります。そして、私はこのオブジェクトをXMLに保存しています。そのためには、xmlwriterを使用しています。実行時にobjを反復し、getType()を使用してノードのタイプを読み取り、名前を渡してxmlnodeを書き込みます。 GetType().GetProperties()
私はそのノードのすべてのプロパティを取得します。その後、foreachを使用してPropertyInfoアレイを1つずつ通過し、PropertyInfoの名前を属性として書きますが、ノードを割り当てられたプロパティを持っている場合は、書く必要があります。そのためのドット上記の表記。 PropertyInfoとオブジェクトを渡すだけで、希望の形式で書く方法を探しています。
助けてくれてありがとう!
編集2:
特定のノードの場合、コレクションであり、XMLの階層に暗黙的に存在する子供のような高さや幅などのプロパティがあり、いくつかのプロパティも持つリソースのように、それぞれが親の下のノードで表されます。しかし、保存は次のように書かれますが
<Parent.Resources>
<Resource1 ...../>
<Resource2 ...../>
</Parent.Resources>
手伝ってくれてありがとう!
解決
よりクリーンになるもの WriteStartElement("Element.Attribute")
?それはあなたがしていることを正確に説明します - その名前で新しい要素を作成します。
間違いなく使用したい場合 XmlWriter
, 、私はそのアプローチに固執します。しかし、Henrikが言うように、LinqからXMLは、一般にそもそもXMLを作成するより簡単な方法です。
XElement element = new XElement("Element",
new XAttribute("Attribute1", "Value"),
// This could contain nested elements instead of just a text node
new XElement("Element.Attribute2", "Second value")
);
編集:質問を更新しましたが、この「ドット表記」を使用したい理由がまだわかりません。 XMLの階層に暗黙的ではありませんか?
他のヒント
「ドット表記」のようなものはありません。あなたはXAMLに言及しているようです。 XAMLを超えて、XMLには「ドット表記」などはありません。だからあなたはそれに対するサポートを見つけていません - それは存在しません。
最後に、このようにこのstring.formatを使用することになります。ここ :
WriteXml(XmlWriter writer, Transform sender)
{
string elementName = sender.GetType.Name;
writer.WriteStartElement(elementName);
............................
............................
//and for each property inside a foreach
writer.WriteStartElement(GetDotElement(elementName, propertyName));
}
private string GetDotElement(string elementName, string propertyName)
{
return string.Format("{0}.{1}", elementName, propertyName);
}
私を助けてくれてありがとう!!