1

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().Name を使用してノードのタイプを読み取り、それを渡して XmlNode を書き込みGetType().GetProperties()、それを使用してそのノードのすべてのプロパティを取得し、次に foreach を使用して PropertyInfo 配列を 1 つずつ調べます。 PropertyInfo の Name を属性として書き込みますが、ノードに割り当てられたプロパティがある場合は、上記のドット表記を記述する必要があります。PropertyInfo とオブジェクトを渡すだけで、目的の形式で書き込むメソッドを探しています。

助けてくれてありがとう!

編集2:

特定のノードに対して、Height や Width のようなプロパティ、コレクションであり Xml の階層に暗黙的に存在する Children のようなプロパティ、いくつかのプロパティを持ち、それぞれが親の下のノードで表される Resources のようなプロパティがあります。ただし、保存中は次のように記述されます。

<Parent.Resources>
    <Resource1 ...../>
    <Resource2 ...../>
</Parent.Resources>

手伝ってくれてありがとう!

4

3 に答える 3

4

よりもきれいなものは何WriteStartElement("Element.Attribute")ですか?それはあなたが何をしているのかを正確に説明しています - その名前で新しい要素を作成しています。

あなたが間違いなく を使いたいのならXmlWriter、私はそのアプローチに固執します。ただし、Henrik が言うように、LINQ to 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 の階層では暗黙的ではありませんか?

于 2009-12-28T12:09:47.873 に答える
0

「ドット表記」というものはありません。XAMLを参照しているようです。XAML以外に、XMLには「ドット表記」のようなものはありません。そのため、サポートが見つかりません。存在しません。

于 2009-12-29T04:47:04.367 に答える
0

最後に、この 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);
}

私を助けてくれてありがとう!!

于 2010-01-01T11:20:30.273 に答える