XML-мульти-разбор в C #

RepositoryBase является не базовым классом MyEntityRepository. Вы ищете общую дисперсию , которая существует в C # в ограниченной степени, но здесь не применима.

Предположим, что у вашего класса RepositoryBase был такой метод:

void Add(T entity) { ... }

Теперь рассмотрим:

MyEntityRepository myEntityRepo = GetMyEntityRepo(); // whatever
RepositoryBase baseRepo = (RepositoryBase)myEntityRepo; 
baseRepo.Add(new OtherEntity(...));

Теперь вы добавили другой тип сущности в MyEntityRepository ... и это не может быть прав.

В принципе, общая дисперсия является безопасной только в определенных ситуациях. В частности, общая ковариация (именно это вы описываете здесь) безопасна только тогда, когда вы только когда-либо получаете значения «API»; общая контравариантность (которая работает наоборот) безопасна только тогда, когда вы когда-либо вводили значения в API (например, общее сравнение, которое может сравнивать любые две формы по площади, можно рассматривать как сравнение квадратов).

В C # 4 это доступно для общих интерфейсов и общих делегатов, а не для классов - и только для ссылочных типов. См. MSDN для получения дополнительной информации, прочитайте & lt; plug & gt; прочитайте C # в глубине, 2-е издание , глава 13 & lt; / plug & gt; или блога Эрика Липперта по этой теме. Кроме того, я рассказал об этом в NDC в июле 2010 года - видео доступно здесь .

-1
задан jdweng 18 January 2019 в 11:54
поделиться

2 ответа

Используя xml linq, я помещаю результаты в словарь, разбирая все свойства в xml

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication97
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);

            List<Respcondition> responses = doc.Descendants("respcondition").Select(x => new Respcondition()
            {
                _continue = (string)x.Attribute("continue"),
                varequal = (string)x.Descendants("varequal").FirstOrDefault(),
                respident = (string)x.Descendants("varequal").FirstOrDefault().Attribute("respident"),
                setvar = (string)x.Element("setvar"),
                action = (string)x.Element("setvar").Attribute("action"),
                linkrefid = (string)x.Element("displayfeedback").Attribute("linkrefid"),
                feedbacktype = (string)x.Element("displayfeedback").Attribute("feedbacktype")
            }).ToList();

            Dictionary<string, List<Respcondition>> dict = responses.GroupBy(x => x.respident, y => y)
                .ToDictionary(x => x.Key, y => y.ToList());

        }
    }
    public class Respcondition
    {
        public string _continue { get; set; }
        public string varequal { get; set; }
        public string respident { get; set; }
        public string setvar { get; set; }
        public string action { get; set; }
        public string linkrefid { get; set; }
        public string feedbacktype { get; set; }
    }


}

 //<respcondition continue="Yes">
 //   <conditionvar>
 //     <varequal respident="gap_0">auswahl1</varequal>
 //   </conditionvar>
 //   <setvar action="Add">1</setvar>
 //   <displayfeedback linkrefid="0_Response_0" feedbacktype="Response"/>
 // </respcondition>
0
ответ дан jdweng 18 January 2019 в 11:54
поделиться

<!DOCTYPE questestinterop SYSTEM "ims_qtiasiv1p2p1.dtd">

<!--Generated by ILIAS XmlWriter-->

<questestinterop>


<item title="titel" maxattempts="0" ident="il_0_qst_152800">

<qticomment>beschreibung</qticomment>

<duration>P0Y0M0DT0H1M0S</duration>


<itemmetadata>


<qtimetadata>


<qtimetadatafield>

<fieldlabel>ILIAS_VERSION</fieldlabel>

<fieldentry>5.3.8 2018-08-29</fieldentry>

</qtimetadatafield>


<qtimetadatafield>

<fieldlabel>QUESTIONTYPE</fieldlabel>

<fieldentry>CLOZE QUESTION</fieldentry>

</qtimetadatafield>


<qtimetadatafield>

<fieldlabel>AUTHOR</fieldlabel>

<fieldentry>Patrick Maik Mächler</fieldentry>

</qtimetadatafield>


<qtimetadatafield>

<fieldlabel>additional_cont_edit_mode</fieldlabel>

<fieldentry>default</fieldentry>

</qtimetadatafield>


<qtimetadatafield>

<fieldlabel>externalId</fieldlabel>

<fieldentry>5c3f83ce4b6880.97213190</fieldentry>

</qtimetadatafield>


<qtimetadatafield>

<fieldlabel>textgaprating</fieldlabel>

<fieldentry>ci</fieldentry>

</qtimetadatafield>


<qtimetadatafield>

<fieldlabel>fixedTextLength</fieldlabel>

<fieldentry>1</fieldentry>

</qtimetadatafield>


<qtimetadatafield>

<fieldlabel>identicalScoring</fieldlabel>

<fieldentry>1</fieldentry>

</qtimetadatafield>


<qtimetadatafield>

<fieldlabel>combinations</fieldlabel>

<fieldentry>W10=</fieldentry>

</qtimetadatafield>

</qtimetadata>

</itemmetadata>


<presentation label="titel">


<flow>


<material>

<mattext texttype="text/xhtml"><p>text1</p> <div id="OKAYFREEDOM_INJECTED" style="display: none;"></div></mattext>

</material>


<material>

<mattext texttype="text/xhtml"><p></p> <p>text2</p> <p></p> <p>auswahllücke</mattext>

</material>


<response_str ident="gap_0" rcardinality="Single">


<render_choice shuffle="No">


<response_label ident="0">


<material>

<mattext>auswahl1</mattext>

</material>

</response_label>


<response_label ident="1">


<material>

<mattext>auswahl2</mattext>

</material>

</response_label>

</render_choice>

</response_str>


<material>

<mattext texttype="text/plain">textlücke</mattext>

</material>


<response_str ident="gap_1" rcardinality="Single">

<render_fib maxchars="2" columns="8" prompt="Box" fibtype="String"/>

</response_str>


<material>

<mattext texttype="text/plain">numlücke</mattext>

</material>


<response_num ident="gap_2" rcardinality="Single" numtype="Decimal">

<render_fib maxchars="3" columns="2" prompt="Box" fibtype="Decimal" maxnumber="100" minnumber="1"/>

</response_num>


<material>

<mattext texttype="text/xhtml"></p> <p></p> <div></div> <p></p> <div></div> <div></div></mattext>

</material>

</flow>

</presentation>


<resprocessing>


<outcomes>

<decvar/>

</outcomes>


<respcondition continue="Yes">


<conditionvar>

<varequal respident="gap_0">auswahl1</varequal>

</conditionvar>

<setvar action="Add">1</setvar>

<displayfeedback linkrefid="0_Response_0" feedbacktype="Response"/>

</respcondition>


<respcondition continue="Yes">


<conditionvar>

<varequal respident="gap_0">auswahl2</varequal>

</conditionvar>

<setvar action="Add">2</setvar>

<displayfeedback linkrefid="0_Response_1" feedbacktype="Response"/>

</respcondition>


<respcondition continue="Yes">


<conditionvar>

<varequal respident="gap_1">antwort1</varequal>

</conditionvar>

<setvar action="Add">3</setvar>

<displayfeedback linkrefid="1_Response_0" feedbacktype="Response"/>

</respcondition>


<respcondition continue="Yes">


<conditionvar>

<varequal respident="gap_1">antwort2</varequal>

</conditionvar>

<setvar action="Add">4</setvar>

<displayfeedback linkrefid="1_Response_1" feedbacktype="Response"/>

</respcondition>


<respcondition continue="Yes">


<conditionvar>

<varequal respident="gap_2">99</varequal>

</conditionvar>

<setvar action="Add">5</setvar>

<displayfeedback linkrefid="2_Response_0" feedbacktype="Response"/>

</respcondition>


<respcondition continue="Yes">


<conditionvar>

<varequal respident="gap_0">auswahl2</varequal>


<and>

<varequal respident="gap_1">antwort2</varequal>

</and>


<and>

<varequal respident="gap_2">99</varequal>

</and>

</conditionvar>

<displayfeedback linkrefid="response_allcorrect" feedbacktype="Response"/>

</respcondition>


<respcondition continue="Yes">


<conditionvar>


<not>

<varequal respident="gap_0">auswahl2</varequal>


<and>

<varequal respident="gap_1">antwort2</varequal>

</and>


<and>

<varequal respident="gap_2">99</varequal>

</and>

</not>

</conditionvar>

<displayfeedback linkrefid="response_onenotcorrect" feedbacktype="Response"/>

</respcondition>

</resprocessing>


<itemfeedback ident="0" view="All">


<flow_mat>


<material>

<mattext texttype="text/xhtml"><p></p> <div id="OKAYFREEDOM_INJECTED" style="display: none;"></div></mattext>

</material>

</flow_mat>

</itemfeedback>


<itemfeedback ident="1" view="All">


<flow_mat>


<material>

<mattext texttype="text/xhtml"><p></p> <div id="OKAYFREEDOM_INJECTED" style="display: none;"></div></mattext>

</material>

</flow_mat>

</itemfeedback>


<itemfeedback ident="2" view="All">


<flow_mat>


<material>

<mattext texttype="text/xhtml"><p></p> <div id="OKAYFREEDOM_INJECTED" style="display: none;"></div></mattext>

</material>

</flow_mat>

</itemfeedback>


<itemfeedback ident="response_allcorrect" view="All">


<flow_mat>


<material>

<mattext texttype="text/xhtml"><p></p> <div id="OKAYFREEDOM_INJECTED" style="display: none;"></div></mattext>

</material>

</flow_mat>

</itemfeedback>


<itemfeedback ident="response_onenotcorrect" view="All">


<flow_mat>


<material>

<mattext texttype="text/xhtml"><p>respnotcorrect</p> <div id="OKAYFREEDOM_INJECTED" style="display: none;"></div></mattext>

</material>

</flow_mat>

</itemfeedback>

</item>

</questestinterop>```

I need to parse this whole file and need only the parts I mentioned before. All other content is not needed for this.
0
ответ дан Patrick 18 January 2019 в 11:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: