我嘗試從 xml 檔案中獲取資訊,到目前為止,我對導航非常滿意
doc.Element("foo1").Element("foo2").Value
但現在我碰壁了,我認為這是因為命名空間。我使用此代碼片段從我的 xml 中過濾特定部分doc:
XNamespace xmlns = "http://www.siemens.com/automation/Openness/SW/Interface/v4";
IEnumerable<XElement> de =
from el in doc.Descendants(xmlns "Section")
where el.Attribute("Name").Value == "Input"
select el;
給定命名空間,生成的 XElement 如下:
<Section Name="Input" xmlns="http://www.siemens.com/automation/Openness/SW/Interface/v4">
<Member Name="STARTTASTER" Datatype="Bool" Remanence="NonRetain" Accessibility="Public">
<AttributeList>
<BooleanAttribute Name="ExternalAccessible" SystemDefined="true">true</BooleanAttribute>
<BooleanAttribute Name="ExternalVisible" SystemDefined="true">true</BooleanAttribute>
<BooleanAttribute Name="ExternalWritable" SystemDefined="true">true</BooleanAttribute>
<BooleanAttribute Name="UserVisible" Informative="true" SystemDefined="true">true</BooleanAttribute>
<BooleanAttribute Name="UserReadOnly" Informative="true" SystemDefined="true">false</BooleanAttribute>
<BooleanAttribute Name="UserDeletable" Informative="true" SystemDefined="true">true</BooleanAttribute>
</AttributeList>
</Member>
</Section>
這正是我想要的,我可以把它保存在 root
現在我用
var foo = root.Element(xmlns "Section");
Console.WriteLine(foo);
我希望得到這個
<Member Name="STARTTASTER" Datatype="Bool" Remanence="NonRetain" Accessibility="Public">
<AttributeList>
<BooleanAttribute Name="ExternalAccessible" SystemDefined="true">true</BooleanAttribute>
<BooleanAttribute Name="ExternalVisible" SystemDefined="true">true</BooleanAttribute>
<BooleanAttribute Name="ExternalWritable" SystemDefined="true">true</BooleanAttribute>
<BooleanAttribute Name="UserVisible" Informative="true" SystemDefined="true">true</BooleanAttribute>
<BooleanAttribute Name="UserReadOnly" Informative="true" SystemDefined="true">false</BooleanAttribute>
<BooleanAttribute Name="UserDeletable" Informative="true" SystemDefined="true">true</BooleanAttribute>
</AttributeList>
</Member>
但我什么也得不到。現在我的第一個問題是為什么,其次,我怎樣才能達到預期的結果。
如果有更好/更實用的方法,我也會很高興。我實際上想將值“STARTTASTER”存盤到一個變數中。
uj5u.com熱心網友回復:
請嘗試以下解決方案。
我將您的 XML 保存為e:\Temp\Aschenauer.xml檔案:
<Section Name="Input" xmlns="http://www.siemens.com/automation/Openness/SW/Interface/v4">
<Member Name="STARTTASTER" Datatype="Bool" Remanence="NonRetain" Accessibility="Public">
<AttributeList>
<BooleanAttribute Name="ExternalAccessible" SystemDefined="true">true</BooleanAttribute>
<BooleanAttribute Name="ExternalVisible" SystemDefined="true">true</BooleanAttribute>
<BooleanAttribute Name="ExternalWritable" SystemDefined="true">true</BooleanAttribute>
<BooleanAttribute Name="UserVisible" Informative="true" SystemDefined="true">true</BooleanAttribute>
<BooleanAttribute Name="UserReadOnly" Informative="true" SystemDefined="true">false</BooleanAttribute>
<BooleanAttribute Name="UserDeletable" Informative="true" SystemDefined="true">true</BooleanAttribute>
</AttributeList>
</Member>
</Section>
C#
void Main()
{
const string filename = @"e:\Temp\Aschenauer.xml";
XDocument xdoc = XDocument.Load(filename);
XNamespace ns = xdoc.Root.GetDefaultNamespace();
var NameAttr = xdoc.Descendants(ns "Member")
.Attributes("Name").FirstOrDefault().Value;
Console.WriteLine($"Name='{NameAttr}'");
}
輸出
名稱='STARTTASTER'
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/414420.html
標籤:
上一篇:EFCore無法轉換運算式來比較EF6可以的兩個集合
下一篇:LINQToEntity-LINQtoEntities無法識別方法“DoubleParse(System.String)”方法
