4 Stimmen

Wie kann ich mit XMLTextReader feststellen, auf welchem Element ich mich befinde?

So sieht mein Code aus:

case "Creator":
    br.Read();
    br.MoveToContent();  // gives the content of the role
    tbComposer.Text = br.Value;
    br.Read();
    br.MoveToContent();  // gives the content of the role
    tbConductor.Text = br.Value;
    br.Read();
    br.MoveToContent();  // gives the content of the role
    tbOrchestra.Text = br.Value;
    break;

Dies ist der Arbeitscode: (Danke an alle für euren Beitrag... ohne euch hätte ich es nicht geschafft!) Spokane-Dude

                case "Creator":
                    br.MoveToFirstAttribute();
                    if (br.Value == "Composer") {
                        br.Read();
                        tbComposer.Text = br.Value;
                    }
                    if (br.Value == "Conductor") {
                        br.Read();
                        tbConductor.Text = br.Value;
                    }
                    if (br.Value == "Orchestra") {
                        br.Read();
                        tbOrchestra.Text = br.Value;
                    }
                    break;

So sieht mein XML aus:

<ItemLookupResponse>
    <OperationRequest/>
    <Items>
        <Request/>
        <Item>
            <ItemAttributes>
                <Binding>Audio CD</Binding>
                <CatalogNumberList>
                    <CatalogNumberListElement>43850</CatalogNumberListElement>
                </CatalogNumberList>
                <Creator Role="Composer">Gioachino Rossini</Creator>
                <Creator Role="Conductor">Riccardo Chailly</Creator>
                <Creator Role="Orchestra">National Philharmonic Orchestra</Creator>
            </ItemAttributes>
        </Item>
    </Items>
</ItemLookupResponse>

Ich muss wissen, ob ich das Element lese Schöpfer Role="Komponist" o Creator Role="Dirigent" usw.

Wie kann ich also mit XMLTextReader feststellen, was der Elementtext ist?

1voto

sehe Punkte 346808

Das kann man erst, wenn es tatsächlich gelesen wird. XmlTextReader liest einen Stream, sequenziell.

Es ist also eher andersherum: Sie können wissen, welches Element Sie hatten, wenn Sie das Attribut Role="Composer" .

Erwägen Sie die Verwendung von XPath, LINQ-To-XML oder ähnlichem: http://msdn.microsoft.com/en-us/library/bb156083.aspx

node.XPathSelectElement(@"*/Creator[@Role=""Conductor""]");

Für XmlTextReader gibt es irgendwo eine XPathReader-Komponente:

1voto

shenhengbin Punkte 4174

Wie wäre es mit diesem Beispiel? Ich hoffe, es ist nützlich für Sie

   static void Main(string[] args)
    {

        string xmlStr = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><Creators><Creator Role=\"Composer\">Gioachino Rossini</Creator><Creator Role=\"Conductor\">Riccardo Chailly</Creator><Creator Role=\"Orchestra\">National Philharmonic Orchestra</Creator></Creators>";
        using (XmlReader xmlReader = XmlTextReader.Create(new StringReader(xmlStr)))
        {
            xmlReader.MoveToContent();
            xmlReader.ReadStartElement("Creators" , "");
            SomeMethod("Composer", xmlReader);
            SomeMethod("Conductor", xmlReader);
            SomeMethod("Orchestra", xmlReader);
        }

        Console.WriteLine("........");
        Console.Read();
    }

    static void SomeMethod(string role, XmlReader xmlReader)
    {
        xmlReader.MoveToAttribute("Role");

        switch (role)
        {
            case "Composer":
                {
                    xmlReader.MoveToContent();
                    Console.WriteLine(string.Format("Composer:{0}", xmlReader.ReadElementContentAsString()));

                } break;
            case "Conductor":
                {
                    xmlReader.MoveToContent();
                    Console.WriteLine(string.Format("Conductor:{0}", xmlReader.ReadElementContentAsString()));

                } break;
            case "Orchestra":
                {
                    xmlReader.MoveToContent();
                    Console.WriteLine(string.Format("Orchestra:{0}", xmlReader.ReadElementContentAsString()));

                } break;

            default: break;
        }
    }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X