2

次の XML ファイルを読み込もうとしています

<Tabellen>
<Header>
    <Tables>
        <Table>SW_RL</Table>
            <Fields>
                <Field>KeyVeld</Field>
                <Type>Alpha</Type>
                <Size>100</Size>
                <SubType>st_none</SubType>
            </Fields>
            <Fields>
                <Field>ErrorCode</Field>
                <Type>Alpha</Type>
                <Size>50</Size>
                <SubType>st_none</SubType>
            </Fields>
            <Fields>
                <Field>Description</Field>
                <Type>Memo</Type>
                <Size>100</Size>
                <SubType>st_none</SubType>
            </Fields>
        </Tables>
</Header>
<Header>
    <Tables>
        <Table>SW_RH</Table>
    <Fields>
        <Field>DocNum</Field>
        <Type>Numeric</Type>
        <Size>0</Size>
        <SubType>st_none</SubType>
    </Fields>
    <Fields>
        <Field>PaymentTerms</Field>
        <Type>Numeric</Type>
        <Size>0</Size>
        <SubType>st_none</SubType>
    </Fields>
    <Fields>
        <Field>DocDate</Field>
        <Type>Date</Type>
        <Size>0</Size>
        <SubType>st_none</SubType>
    </Fields>
    <Fields>
        <Field>Contract_Start</Field>
        <Type>Date</Type>
        <Size>0</Size>
        <SubType>st_none</SubType>
    </Fields>
    <Fields>
        <Field>Contract_End</Field>
        <Type>Date</Type>
        <Size>0</Size>
        <SubType>st_none</SubType>
    </Fields>
    <Fields>
        <Field>CardCode</Field>
        <Type>Alpha</Type>
        <Size>40</Size>
        <SubType>st_none</SubType>
    </Fields>
    <Fields>
        <Field>CardName</Field>
        <Type>Alpha</Type>
        <Size>100</Size>
        <SubType>st_none</SubType>
    </Fields>
    <Fields>
        <Field>BillToAddress</Field>
        <Type>Alpha</Type>
        <Size>100</Size>
        <SubType>st_none</SubType>
    </Fields>
    <Fields>
        <Field>ShipToAddress</Field>
        <Type>Alpha</Type>
        <Size>100</Size>
        <SubType>st_none</SubType>
    </Fields>
    <Fields>
        <Field>NumAtCard</Field>
        <Type>Alpha</Type>
        <Size>100</Size>
        <SubType>st_none</SubType>
    </Fields>
    <Fields>
        <Field>BillingPeriod</Field>
        <Type>Alpha</Type>
        <Size>10</Size>
        <SubType>st_none</SubType>      
    </Fields>
    <Fields>
        <Field>AdvanceBilling</Field>
        <Type>Alpha</Type>
        <Size>10</Size>
        <SubType>st_none</SubType>
    </Fields>
    </Tables>
</Header>
</Tabellen>

現在のコード

XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(directory + "\\Server_Config.xml");
XmlNodeList xmlNodelist = null;
XmlNodeList xmlNodelist2 = null;

xmlNodelist = xmldoc.SelectNodes("Tabellen/Header/Tables");
foreach (XmlNode mnode in xmlNodelist)
{
    MessageBox.Show(mnode["Table"].InnerText, "ok");
     //create table

    xmlNodelist2 = xmldoc.SelectNodes("Tabellen/Header/Tables/Fields");
    foreach (XmlNode mnode2 in xmlNodelist2)
    {
        MessageBox.Show(mnode2["Field"].InnerText, "ok");
        // create fields
    }

}

一般的な考え方は、2 つのテーブルを作成することです 表 1: 3 つのフィールドを含む RL 表 2: 12 のフィールドを含む RH

しかし実際には、結果は両方とも 15 のフィールドを含むテーブルです

私は何を間違っていますか??

4

2 に答える 2

1

Linq2Xml の方が使いやすいです。

XDocument xDoc = XDocument.Load("myfile.xml");
var tables = xDoc.Descendants("Header")
                .Select(h => new
                {
                    Table  = h.Descendants("Table").First().Value,
                    Fields = h.Descendants("Fields")
                              .Select(f=>new{
                                    Field = f.Element("Field").Value,
                                    Type = f.Element("Type").Value,
                                    Size = f.Element("Size").Value,
                                    SubType = f.Element("SubType").Value
                               })
                              .ToList()
                })
                .ToList();
于 2012-10-05T19:58:14.473 に答える
0
xmlNodelist2 = xmldoc.SelectNodes("Tabellen/Header/Tables/Fields");

する必要があります

xmlNodelist2 = mnode.SelectNodes("Fields");

それ以外の場合は、現在のテーブルの下にあるフィールドだけでなく、XML 内のすべてのフィールドを選択します。

(ただし、コードはテストしていません)

于 2012-10-05T20:19:01.270 に答える