Member 14499743 Ответов: 1

Как я могу просто назвать ребенка моих родителей а не его внука


Я делаю парсер для XML-диаграммы состояний с помощью C#. Как мы знаем, там может быть 2 детей схемы XML для государственных и параллельно, так что я сделать 2 функции, одна для государственных и другое параллельно. Как только я могу назвать детей scxml не ребенком своего ребенка в моем коде, он вызывает все child+grandchild+grand_grand и так далее.поэтому, пожалуйста, кто-нибудь объяснит, как просто вызвать child of scxml

Я пытался вызвать его ребенка, но все его ребенок приходит
и мой XML-код
<scxml> 
       <state id="appear"> 
               <onentry>
	<send delay="2000ms" event="viman_1" target="target">
	<send event="viman_1" delay="2000ms">\
		
              <transition event="born" ontransit="say_hello" target="target"> 
              <transition event="viman_1" ontransit="say_hello" target="live"> 
		 <parallel id="live"> 
                    <transition event="hp_zero" target="dead"> 
                        <state id="eat"> 
                         
                         <state id="move"> 
                          
                 
			  
		<onexit>
		 <log expr="'onexit: TS0_s01'">
				
	 
   
		
       <final id="dead">'


Что я уже пробовал:

public static void Main(string[] args)
{
    var 
    xdocXDocument.Load(@"C:/Users/path.xml");

    IEnumerable<xelement> de = from el in xdoc.Descendants() select el;
    foreach (XElement el in de)
    {
        if (string.Equals(el.Name.ToString(), "state", StringComparison.InvariantCultureIgnoreCase))
        {
            stat(el);
        }
        else if (string.Equals(el.Name.ToString(), "parallel", StringComparison.InvariantCultureIgnoreCase))
        {
            parr(el); //my function
        }

    }
}

1 Ответов

Рейтинг:
0

lmoelleb

Использовать это:
XContainer.Способ Элементов (Системы.В формате XML.По LINQ) | Майкрософт Документы[^] вместо потомков, если вы ищете только один уровень.

Что-то еще:

IEnumerable<xelement> de = from el in xdoc.Descendants() select el;

ничего не добавляет, Кроме того, что делает код более сложным. Он в основном говорит: "Сделайте коллекцию b, содержащую все элементы в коллекции a". Почему бы просто не использовать коллекцию а?

Таким образом, вы можете удалить линию и вместо этого зациклиться на ней:
foreach (XElement el in  xdoc.Descendants())

или скорее то что вы хотите в данном конкретном случае:
foreach (XElement el in  xdoc.Root.Elements())