2012-04-19 7 views
0

Я использую xpathdocument, чтобы получить некоторые значения по их выражению xpath, которое работает до тех пор, пока оно не попадет в пространства имен.Получить атрибут xmlpath в пространстве имен по умолчанию в C#

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 синтаксического выражения XPath

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

я получаю проблему пространства имен, что некоторые вещи префикса отсутствуют.

+0

Ну, исходный образец, который вы опубликовали, даже не показывает элемент «html: img», но с (X) элементами HTML 'img' по определению являются пустые элементы (т. не имеют дочерних узлов), у них есть только атрибуты. Если вы хотите прочитать атрибут 'src', тогда используйте' string src = nav.SelectSingleNode ("// html: img/@ src", mgr) .Value; '. Если у вас все еще есть проблемы, отправьте минимальный, но полный и хорошо сформированный образец ввода XML. –

+0

no its base64 string, было бы много для сообщения здесь – Gobliins

+0

Я нашел обходное решение с использованием свойства outerxml, но завтра я попробую ваше решение – Gobliins

ответ

1

Очевидно, что если вам нужно, чтобы добраться до атрибута src, изменить:

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

в:

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

Как вам не нужно сам атрибут, но его строка значение, если тип nav равен IXpathNavigable, используйте:

nav.Evaluate("string(//html:img/@src)", mgr) 
+0

работал, я всегда забывал/@src. Thx guys – Gobliins

+0

@Gobliins: Добро пожаловать. –