Невозможно прочитать XML с XPath - PullRequest
0 голосов
/ 10 ноября 2011

Мне нужно проанализировать файл content.xml в пакете XMind.
Файл выглядит так

<xmap-content xmlns="urn:xmind:xmap:xmlns:content:2.0" xmlns:fo="http://www.w3.org/1999/XSL   /Format" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xlink="http://www.w3.org/1999/xlink" version="2.0">

   <sheet id="sdfasdfsdf">
      <title> Sheet1 </title>
   </sheet>

   <sheet id="fgasdfgasr">
       <title> Sheet2 </title>
   </sheet>
<xmap-content>

Мне нужно получить список заголовков всех листов.

Я использую XPathExpression expr = navigator.Compile("//sheet");
но я думаю, это не работает
что делать. подойдет любое предложение или код.
Спасибо заранее.

Ответы [ 2 ]

2 голосов
/ 10 ноября 2011

Ваш XML определил пространство имен по умолчанию: urn:xmind:xmap:xmlns:content:2.0. Поэтому вам нужно передать его на ваш XML-движок с префиксом, а затем использовать выражение:

//ns:sheet

или другим способом:

//*[local-name() = 'sheet']
0 голосов
/ 10 ноября 2011

попробовать

XPathExpression expr =  navigator.Compile("xmap-content/sheet");

РЕДАКТИРОВАТЬ:

string st = @"<xmap-content xmlns=""urn:xmind:xmap:xmlns:content:2.0"" xmlns:fo=""http://www.w3.org/1999/XSL   /Format"" xmlns:svg=""http://www.w3.org/2000/svg"" xmlns:xhtml=""http://www.w3.org/1999/xhtml"" xmlns:xlink=""http://www.w3.org/1999/xlink"" version=""2.0"">

            <sheet id=""sdfasdfsdf"">
                <title> Sheet1 </title>
            </sheet>

            <sheet id=""fgasdfgasr"">
                <title> Sheet2 </title>
            </sheet>
        </xmap-content>";

XmlDocument document = new XmlDocument();
document.LoadXml(st);

XmlNamespaceManager manager = new XmlNamespaceManager(document.NameTable); 

manager.AddNamespace("xm", "urn:xmind:xmap:xmlns:content:2.0"); 

var titles = document.SelectNodes("//xm:sheet/xm:title", manager);
...