Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Komme nicht ans XML-Node
hrmc
myCSharp.de - Member



Dabei seit:
Beiträge: 15

Themenstarter:

Komme nicht ans XML-Node

beantworten | zitieren | melden

verwendetes Datenbanksystem: XML

Hallo miteinander,

ich habe hier eine XML-Datei komme aber nicht an den gesuchten Knoten ran.

Ich habs so versucht:

 mattext = xmlDoc.DocumentElement.SelectSingleNode("item/material/mattext").InnerText;                    
 Console.WriteLine("XML TYPE = QTI ====" + xmlDoc.DocumentElement.Name);
Aber auch schon mit item/presentation/material/mattext

Ich will an diesen ersten mattext mit dem CDATA Tag rankommen

Vielen Dank!

XML-Code

<?xml version="1.0" encoding="UTF-8"?>
<questestinterop xmlns="http://www.imsglobal.org/xsd/ims_qtiasiv1p2">
  <item label="101" ident="1_5_a565b8da-a305-463f-92d2-7d7be201bd24" maxattempts="3" title="Choice page">
    <presentation label="Choice-Question">
      <material>
        <mattext><![CDATA[Which of these countries border Germany?<br>]]></mattext>
        <mataudio uri="1_5_a565b8da-a305-463f-92d2-7d7be201bd24_01.mp3"/>
      </material>
      <response_lid ident="a565b8da-a305-463f-92d2-7d7be201bd24" rtiming="No" rcardinality="Multiple">
        <render_choice shuffle="No">
          <response_label ident="#1">
            <material>
              <mattext>France</mattext>
            </material>
          </response_label>
          <response_label ident="#2">
            <material>
              <mattext>Denmark</mattext>
            </material>
          </response_label>
          <response_label ident="#3">
            <material>
              <mattext>Poland</mattext>
            </material>
          </response_label>
          <response_label ident="#4">
            <material>
              <mattext>Czech Republic</mattext>
            </material>
          </response_label>
          <response_label ident="#5">
            <material>
              <mattext>Austria</mattext>
            </material>
          </response_label>
          <response_label ident="#6">
            <material>
              <mattext>Switzerland</mattext>
            </material>
          </response_label>
          <response_label ident="#7">
            <material>
              <mattext>Luxembourg</mattext>
            </material>
          </response_label>
          <response_label ident="#8">
            <material>
              <mattext>Greece</mattext>
            </material>
          </response_label>
        </render_choice>
      </response_lid>
    </presentation>
    <resprocessing>
      <outcomes>
        <decvar/>
      </outcomes>
      <respcondition title="correct">
        <conditionvar>
          <and>
            <varequal respident="a565b8da-a305-463f-92d2-7d7be201bd24">#1</varequal>
            <varequal respident="a565b8da-a305-463f-92d2-7d7be201bd24">#2</varequal>
            <varequal respident="a565b8da-a305-463f-92d2-7d7be201bd24">#3</varequal>
            <varequal respident="a565b8da-a305-463f-92d2-7d7be201bd24">#4</varequal>
            <varequal respident="a565b8da-a305-463f-92d2-7d7be201bd24">#5</varequal>
            <varequal respident="a565b8da-a305-463f-92d2-7d7be201bd24">#6</varequal>
            <varequal respident="a565b8da-a305-463f-92d2-7d7be201bd24">#7</varequal>
          </and>
        </conditionvar>
        <setvar varname="Score" action="Set">1</setvar>
        <displayfeedback feedbacktype="Response" linkrefid="correct"/>
      </respcondition>
      <respcondition title="Teilweise">
        <conditionvar>
          <and>
            <or>
              <varequal respident="a565b8da-a305-463f-92d2-7d7be201bd24">#1</varequal>
              <varequal respident="a565b8da-a305-463f-92d2-7d7be201bd24">#2</varequal>
              <varequal respident="a565b8da-a305-463f-92d2-7d7be201bd24">#3</varequal>
              <varequal respident="a565b8da-a305-463f-92d2-7d7be201bd24">#4</varequal>
              <varequal respident="a565b8da-a305-463f-92d2-7d7be201bd24">#5</varequal>
              <varequal respident="a565b8da-a305-463f-92d2-7d7be201bd24">#6</varequal>
              <varequal respident="a565b8da-a305-463f-92d2-7d7be201bd24">#7</varequal>
            </or>
            <not>
              <and>
                <varequal respident="a565b8da-a305-463f-92d2-7d7be201bd24">#1</varequal>
                <varequal respident="a565b8da-a305-463f-92d2-7d7be201bd24">#2</varequal>
                <varequal respident="a565b8da-a305-463f-92d2-7d7be201bd24">#3</varequal>
                <varequal respident="a565b8da-a305-463f-92d2-7d7be201bd24">#4</varequal>
                <varequal respident="a565b8da-a305-463f-92d2-7d7be201bd24">#5</varequal>
                <varequal respident="a565b8da-a305-463f-92d2-7d7be201bd24">#6</varequal>
                <varequal respident="a565b8da-a305-463f-92d2-7d7be201bd24">#7</varequal>
                <not>
                  <varequal respident="a565b8da-a305-463f-92d2-7d7be201bd24">#8</varequal>
                </not>
              </and>
            </not>
          </and>
        </conditionvar>
        <displayfeedback feedbacktype="Response" linkrefid="teilweise"/>
      </respcondition>
      <respcondition title="wrong">
        <conditionvar>
          <and>
            <not>
              <varequal respident="a565b8da-a305-463f-92d2-7d7be201bd24">#1</varequal>
            </not>
            <not>
              <varequal respident="a565b8da-a305-463f-92d2-7d7be201bd24">#2</varequal>
            </not>
            <not>
              <varequal respident="a565b8da-a305-463f-92d2-7d7be201bd24">#3</varequal>
            </not>
            <not>
              <varequal respident="a565b8da-a305-463f-92d2-7d7be201bd24">#4</varequal>
            </not>
            <not>
              <varequal respident="a565b8da-a305-463f-92d2-7d7be201bd24">#5</varequal>
            </not>
            <not>
              <varequal respident="a565b8da-a305-463f-92d2-7d7be201bd24">#6</varequal>
            </not>
            <not>
              <varequal respident="a565b8da-a305-463f-92d2-7d7be201bd24">#7</varequal>
            </not>
          </and>
        </conditionvar>
        <displayfeedback feedbacktype="Response" linkrefid="wrong"/>
      </respcondition>
    </resprocessing>
    <itemfeedback ident="correct" view="Candidate">
      <material>
        <mattext>Correct!</mattext>
      </material>
    </itemfeedback>
    <itemfeedback ident="teilweise" view="Candidate">
      <material>
        <mattext>Wrong!</mattext>
      </material>
    </itemfeedback>
    <itemfeedback ident="wrong" view="Candidate">
      <material>
        <mattext>Wrong!</mattext>
      </material>
    </itemfeedback>
  </item>
</questestinterop>
private Nachricht | Beiträge des Benutzers
VizOne
myCSharp.de - Member

Avatar #avatar-1563.gif


Dabei seit:
Beiträge: 1551

beantworten | zitieren | melden

Hi,

Du vergisst, dass deine Elemente einen Namespace verwenden. Folgendes sollte gehen:


var ns = new XmlNamespaceManager(xmldoc.NameTable);
ns.AddNamespace("x", "http://www.imsglobal.org/xsd/ims_qtiasiv1p2");
var mattext = xmldoc.DocumentElement.SelectSingleNode("x:item/x:presentation/x:material/x:mattext", ns).InnerText;

Übrigens fehlt beim CDATA Block der besagten Node ein Ausrufezeichen, also: <![CDATA[ ... ]]>


Grüße,
Andre
private Nachricht | Beiträge des Benutzers
hrmc
myCSharp.de - Member



Dabei seit:
Beiträge: 15

Themenstarter:

beantworten | zitieren | melden

Vielen Dank!
private Nachricht | Beiträge des Benutzers
Jack_AI
myCSharp.de - Member



Dabei seit:
Beiträge: 198
Herkunft: Erlangen

beantworten | zitieren | melden

Hallo hrmc,

ich beschäftige mich zwar erst seit einigen Tagen mit XPath, aber ich glaube dein XPath-Ausdruck ist falsch.

Statt "item/material/mattext" wäre (glaube ich zumindest) "//item/presentation/material/mattext" korrekt.

Vielleicht lag es ja daran...

Gruß,
Jack
private Nachricht | Beiträge des Benutzers
hrmc
myCSharp.de - Member



Dabei seit:
Beiträge: 15

Themenstarter:

beantworten | zitieren | melden

//nichts ;)
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von hrmc am .
private Nachricht | Beiträge des Benutzers
Jack_AI
myCSharp.de - Member



Dabei seit:
Beiträge: 198
Herkunft: Erlangen

beantworten | zitieren | melden

Rein aus Interesse:

Hat einer der hier genannten Vorschläge geholfen?

Gruß,
Jack
private Nachricht | Beiträge des Benutzers
fielding
myCSharp.de - Member



Dabei seit:
Beiträge: 62

beantworten | zitieren | melden

Es liegt sicher am namespacemanager und die hier gezeigte lösung müsste funktionieren. Allerdings wärs komfortabler wenn man den defaultnamespace auch dem namespacemanager als default bekannt macht (präfix string.empty), dann spart man sich die präfixe im xpath ausdruck (welche ich gerne vergesse und dann doof schau).

Je nachdem, welcher Knoten aktuell der Kontextknoten ist, kann der xpath ausdruck stimmen oder auch nicht. Deiner ist auf jeden fall auch richtig, wobei du dir den doppelslash sparen kannst.

passen würde unter anderem (Kontext root):

//item/presentation/material/mattext
/questestinterop/item/presentation/material/mattext
//presentation/material/mattext
/*/presentation/material/mattext

Gut zum testen ist immer der xpath visualizer.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von fielding am .
private Nachricht | Beiträge des Benutzers
VizOne
myCSharp.de - Member

Avatar #avatar-1563.gif


Dabei seit:
Beiträge: 1551

beantworten | zitieren | melden

Hi,

Man kann zwar einen default namespace im XmlNamespaceManager definieren, dieser findet aber bei Select* keine Beachtung, da XPath 1.0 das schlichtweg nicht unterstützt (und die FCL wiederum nur XPath 1.0 unterstützt).

http://connect.microsoft.com/VisualStudio/feedback/details/277186/xmlnamespacemanager-and-undefinedxsltcontext-dont-handle-default-namespace

Grüße,
Andre

P.S.: es gibt natürlich 3rd Party Bibliotheken, die XPath 2 unterstützen, etwa XQSharp
private Nachricht | Beiträge des Benutzers