0

xml ドキュメントをクエリしようとしていますが、このコードは閉じたタグ表記の xml 部分を読み取らず、細かい xelement を読み取ります。誰かが私が間違っていることを見つけることができますか?

閉じたタグ付きファイルを提供する XML ドキュメントを生成したプログラムがあるため、現在問題になっています。

<?xml version="1.0" encoding="utf-8" ?>
<Student>

 <Person name="John" city="Auckland" country="NZ" />

 <Person>
    <Course>GDICT-CN</Course>
    <Level>7</Level>
    <Credit>120</Credit>
    <Date>129971035565221298</Date>
 </Person>
 <Person>
    <Course>GDICT-CN</Course>
    <Level>7</Level>
    <Credit>120</Credit>
    <Date>129971036040828501</Date>
 </Person>
</Student>
class Program
{
    static void Main(string[] args)
    {
        XDocument xDoc = XDocument.Load(AppDomain.CurrentDomain.BaseDirectory + "Customers.xml");
        IEnumerable<XElement> rows = from row in xDoc.Descendants("Person") select row;

        foreach(XElement xEle in rows)
        {
        IEnumerable<XAttribute>attlist = from att in xEle.DescendantsAndSelf().Attributes() select att;

            foreach(XAttribute xatt in attlist)
            {
            Console.WriteLine(xatt);
            }
            Console.WriteLine("-------------------------------------------");
        }
        Console.ReadLine();

    }
}
4

2 に答える 2

0

Courseおよびその他の属性をとして追加しXElementたので、属性の代わりにXElementsをループする必要があります-

foreach (XElement xEle in rows)
{
    IEnumerable<XAttribute> attlist = from att in xEle.DescendantsAndSelf()
                                        .Attributes() select att;

    foreach (XAttribute xatt in attlist)
    {
       Console.WriteLine(xatt);
    }
    foreach (XElement elemnt in xEle.Descendants())
    {
       Console.WriteLine(elemnt.Value);
    }
    Console.WriteLine("-------------------------------------------");
}
于 2012-11-11T11:05:30.023 に答える
0

最初に Person レベルに移動し、Person を反復処理する必要があります。次に、Person ごとにその属性を反復処理できます。

    private static void Main(string[] args)
    {
        //string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
        //XDocument xDoc = XDocument.Load(path + "\\Student Data\\data.xml");
        XDocument xDoc = XDocument.Load(AppDomain.CurrentDomain.BaseDirectory + "Customers.xml");
        IEnumerable<XElement> xElements = xDoc.Descendants("Person");
        foreach (XElement element in xElements)
        {
            foreach (XAttribute attribute in element.Attributes())
            {
                Console.WriteLine(attribute);
            }
            Console.WriteLine("-------------------------------------------");
        }
        Console.ReadLine();
    }
于 2012-11-11T11:24:39.783 に答える