0

私は xpathdocument を使用して、名前空間になるまで機能する xpath 式でいくつかの値を取得しています。

xml:

?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet href="vsstyle_xml.cgi" type="text/css"?>
<vs120data version="0x1210019" build="21.0.117" label="D21.00.117SAEN060223"   
xmlns:html="http://www.w3.org/1999/xhtml" SIMATIC_VS_Escaped="1">
VS120 Data from 192.168.0.43 (MAC: 08:00:06:71:8C:EE) Time Sync Info: Source was PC:   
PC=192.168.0.1 - TZ is GMT/UTC +1h. Last Synchronization: Feb 27, 2006, 16:41:08.   
Current Timestamp: Feb 27, 2006, 16:44:14.  HWVers: 0x34<html:title>VS120   
Data from 192.168.0.43 (MAC: 08:00:06:71:8C:EE)  at Feb 27,    2006, 16:44:14.   
</html:title>   
<Standard-Parameters>      
Standard-Parameters   
  <Startup-Request> 

...

<Images>
Images
  <Scene>
  Scene<html:img alt="html:img" src="data:image/png;base64...."

'

C# コード:

XmlNamespaceManager mgr = new XmlNamespaceManager(nav.NameTable);      
mgr.AddNamespace("html", "http://www.w3.org/1999/xhtml");   
XPathNavigator hc = nav.SelectSingleNode("//html:img", mgr);  

ここでは空のノードのみを取得します。

xpath式によるsandart xpath解析を使用すると

parseXPath("/vs120data/Model/Images/Scene/html:img/@src");

いくつかのプレフィックスが欠落しているという名前空間の問題が発生します。

4

1 に答える 1

1

src明らかに、属性にアクセスする必要がある場合は、次のように変更します。

nav.SelectSingleNode("//html:img", mgr)

:

nav.SelectSingleNode("//html:img/@src", mgr)

属性そのものではなく、その文字列値が必要なため、navisのタイプを想定して、次IXpathNavigableを使用します

nav.Evaluate("string(//html:img/@src)", mgr)
于 2012-04-19T15:57:25.047 に答える