3
好吧,這把我現在佔領了幾個小時,我仍然有它沒有解釋: 我的XML開始是這樣的:XmlNodeList保持爲空 - 爲什麼是這樣?
<?xml version="1.0" encoding="iso-8859-1"?>
<ISO15745Profile xmlns="http://www.profibus.com/GSDML/2003/11/DeviceProfile" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.profibus.com/GSDML/2003/11/DeviceProfile ..\XSD\GSDML-DeviceProfile-v2.1.xsd">
<ProfileHeader>
<ProfileIdentification>PROFINET Device Profile</ProfileIdentification>
<ProfileRevision>1.00</ProfileRevision>
<ProfileName>Device Profile for PROFINET Devices</ProfileName>
<ProfileSource>PROFIBUS Nutzerorganisation e. V. (PNO)</ProfileSource>
<ProfileClassID>Device</ProfileClassID>
<ISO15745Reference>
<ISO15745Part>4</ISO15745Part>
<ISO15745Edition>1</ISO15745Edition>
<ProfileTechnology>GSDML</ProfileTechnology>
</ISO15745Reference>
</ProfileHeader>
<ProfileBody>
<DeviceIdentity DeviceID="0x000A" VendorID="0x00B0">
<InfoText TextId="InfoTextId1"/>
<VendorName Value="Phoenix Contact GmbH"/>
</DeviceIdentity>
<DeviceFunction>
<Family MainFamily="I/O" ProductFamily="Inline"/>
</DeviceFunction>
<ApplicationProcess>
<DeviceAccessPointList>
<DeviceAccessPointItem ID="DIM 1" FixedInSlots="0" PhysicalSlots="0..64" MinDeviceInterval="32" ModuleIdentNumber="0x00000300" DNS_CompatibleName="IL-PN-BK-2TX" ImplementationType="ERTEC200" ObjectUUID_LocalIndex="1">
<ModuleInfo>
<Name TextId="IL PN BK DI8 DO4 2TX"/>
<InfoText TextId="InfoTextId1"/>
<VendorName Value="Phoenix Contact"/>
<OrderNumber Value="2703994"/>
</ModuleInfo>
<SubslotList>
<SubslotItem SubslotNumber="32768" TextId="SubSlot_Interface"/>
<SubslotItem SubslotNumber="32769" TextId="SubSlot_Port1"/>
<SubslotItem SubslotNumber="32770" TextId="SubSlot_Port2"/>
</SubslotList>
<IOConfigData MaxInputLength="512" MaxOutputLength="512"/>
<UseableModules>
<ModuleItemRef FixedInSlots="1" ModuleItemTarget="1"/>
<ModuleItemRef AllowedInSlots="4..64" ModuleItemTarget="2"/>
<ModuleItemRef AllowedInSlots="4..64" ModuleItemTarget="3"/>
<ModuleItemRef AllowedInSlots="4..64" ModuleItemTarget="4"/>
<ModuleItemRef AllowedInSlots="4..64" ModuleItemTarget="5"/>
<ModuleItemRef AllowedInSlots="4..64" ModuleItemTarget="6"/>
...
現在我想要做的是與AllowedInSlots工作,但當創建一個XmlNodeList與
XmlDocument gsdml = new XmlDocument();
gsdml.Load(fpfad);
XmlNodeList ModuleItemRef = gsdml.SelectNodes("/ISO15745Profile/ProfileBody/ApplicationProcess/DeviceAccessPointList/DeviceAccessPointItem/UseableModules");
XmlNodeList保持空。我究竟做錯了什麼?我認爲也許我必須和Namespacemanager一起工作並嘗試過,但那沒有做任何事情。
這是我做過這樣的嘗試:
XmlDocument gsdml = new XmlDocument();
gsdml.Load(fpfad);
XmlNamespaceManager mgr = new XmlNamespaceManager(gsdml.NameTable);
mgr.AddNamespace("iso", "http://www.profibus.com/GSDML/2003/11/DeviceProfile");
XmlNodeList ModuleItemRef = gsdml.SelectNodes("/iso:ISO15745Profile/ProfileBody/ApplicationProcess/DeviceAccessPointList/DeviceAccessPointItem/UseableModules", mgr);
它沒有工作,雖然如此,事情必須有錯。
第二編輯: 包括路徑的每個部分的前綴做了竅門。
好的,編輯了這個問題,以包含我嘗試處理該問題的(錯誤的?)代碼。 – Stefan
再次編輯(終於搞定了)。感謝您幫助我,如果您沒有告訴我名稱空間實際上是問題,那麼可能會先嚐試其他方法。 – Stefan
你在問題的第二個問題中寫了答案,但我會在這裏重寫它,以供將來看到的任何人使用。您必須在每個零件上指定名稱空間:「/ iso:ISO15745Profile/iso:ProfileBody/iso:ApplicationProcess ....」 –