我想從使用LINQ表達式的scxml文件中的「狀態」和「轉換」中獲取屬性。如何從xml/scxml獲取屬性
這裏的SCXML文件:
<?xml version="1.0" encoding="utf-8"?>
<scxml xmlns:musthave="http://musthave.com/scxml/1.0" version="1.0" initial="Start" xmlns="http://www.w3.org/2005/07/scxml">
<state id="abc" musthave:displaystate="abcd" musthave:attribute1="None" musthave:attribute2="None">
<transition attribute3="blabla" attribute4="blabla" xmlns=""/>
</state>
<state id="bla" musthave:displaystate="ababab" musthave:attribute2="View" musthave:attribute1="View"/>
</scxml>
下面是我在做什麼:
var scxml = XDocument.Load(@"c:\test_scmxl.scxml");
如果我在控制檯上打印顯示我:
<scxml xmlns:musthave="http://musthave.com/scxml/1.0" version="1.0" initial="Start" xmlns="http://www.w3.org/2005/07/scxml">
<state id="abc" musthave:displaystate="abcd" musthave:attribute1="None" musthave:attribute2="None">
<transition attribute3="blabla" attribute4="blabla" xmlns=""/>
</state>
<state id="bla" musthave:displaystate="ababab" musthave:attribute2="View" musthave:attribute1="View"/>
</scxml>
我試圖獲得像這樣的所有「狀態」:
foreach (var s in scxml.Descendants("state"))
{
Console.WriteLine(s.FirstAttribute);
}
而當我打印它看看我是否得到id =「abc」,在這個例子中,它不會返回任何東西。
儘管如此,如果我運行代碼:
foreach (var xNode in scxml.Elements().Select(element => (from test in element.Nodes() select test)).SelectMany(a => a))
{
Console.WriteLine(xNode);
Console.WriteLine("\n\n\n");
}
這表明我:
<state id="abc" musthave:displaystate="abcd" musthave:attribute1="None" musthave:attribute2="None" xmlns:musthave="http://musthave.com/scxml/1.0" xmlns="http://www.w3.org/2005/07/scxml">
<transition attribute3="blabla" attribute4="blabla" xmlns="" />
</state>
<state id="bla" musthave:displaystate="" musthave:attribute2="View" musthave:attribute1="View" xmlns:musthave="http://musthave.com/scxml/1.0"
xmlns="http://www.w3.org/2005/07/scxml" />
的如何做到這一點任何想法?
說明:我已經閱讀了很多文章,並試圖按照建議那樣做,但似乎沒有任何工作到現在爲止。
編輯:它沒有得到任何屬性,就像「第一屬性」一樣。
foreach (var state in scxml.Descendants("state"))
{
Console.WriteLine(state.Attribute("id"));
}
編輯:下面的代碼也不起作用。控制檯警告無效可能性(可抑制)。沒有東西會回來。
foreach (var state in scxml.Root.Descendants("state"))
{
Console.WriteLine(state.Attribute("id"));
}
對不起,我沒有設法找出問題的癥結所在。 –
@OndrejJanacek,「IDeveloper」有一個很好的解決方案。只是爲了你知道。 =) – Th3B0Y
謝謝,我明白這一點:)我不會來這個解決方案。 –