-2

奇妙な問題があります。作業する必要がある XML を変更することはできません (これが問題の原因です)。私が扱っている XML は、次の形式を取ります。

<DocumentRoot>
   <Parent>
      <ClassAttribute> Value </ClassAttribute>
      <ClassName> More Attributes </ClassName> <!--Can occur a varying number of times.-->
   </Parent>
   <Parent>
      <ClassAttribute> Value </ClassAttribute>
      <ClassName> More Attributes </ClassName>
      <ClassName> More Attributes </ClassName>
   </Parent>
</DocumentRoot>

私がしたいことは、この情報を抽出し、それを使用してカスタム クラス CustomClassName をインスタンス化し、それを に追加することです。ここで、XML ドキュメントからの個別List<CustomClassName>の各要素 (値ではない) を使用して、の新しい CustomClassName を作成します。次のフォーム: <ClassName>

public class CustomClassName {
   public string ClassName; //gotten from the ClassName element (NOT the value)
   public List<string> classAttributes //gotten from the value inside the ClassAttribute element
   public List<string> moreAttributes //gotten from the value inside the ClassName element

}

私の希望を明確に説明できていることを願っています。

これを行うことは可能ですか?

編集 :

それぞれの「異なる」ClassName 要素とは、要素 ClassName が XML ドキュメント内に複数回存在することを意味しますが、関連する属性 (ClassAttribute 要素の値) を使用して ClassName クラスを 1 つだけインスタンス化する必要があります。インスタンス化されたクラスのプロパティの末尾に「追加」される個別の ClassName 要素の値。

4

2 に答える 2

0

これを試して

from n in doc.Root.Elements("Parent") select 
{
ClassName = n.Element("ClassName").First().Attribute("ATTRNAME").Value,
classAttributes = from a in n.Elements("ClassAttribute") select a.Value,
moreAttributes  = from a in n.Elements("ClassName") select a.Value
}
于 2012-04-19T16:51:34.500 に答える
0
XElement root = XElement.Load(file); // or .Parse(string)
List<CustomClassName> list = root.Descendants("ClassName").Select(x =>
new CustomClassName()
{
    ClassName = x.Name.LocalName, // is the name, not the value    
    classAttributes = x.Parent.Element("ClassAttribute").Value, // Value is a string, not a list, you'll have to do the conversion.
    moreAttributes = x.Value // is the value, but Value is a string, not a list, you'll have to do the conversion.
})
.ToList();

これはあまり意味がありません。要素の名前から文字列「ClassName」を<ClassName>カスタム クラスの ClassName 変数に割り当てる理由です。しかし、xml がなければ、これ以上理解することは不可能です。

とにかくこれがお役に立てば幸いです。これの秘訣は、Descendants("ClassName")各ノードParent.Element("ClassAttribute")がその属性を取得することです。

于 2012-04-20T17:27:07.120 に答える