XPath normalize-space () не работает как пошаговая функция?

Я только что придумал выражение XPath, чтобы найти все пустые элементы и вернуть текст сразу после концов.

Я протестировал этот XPath в КИСЛОРОДЕ и вернул именно то, что я ищу. По неизвестной мне причине я не могу сделать это в Visual Studio (C #).

Выражение XPath:

//xref[not(@href)]/normalize-space(substring(following-sibling::text()[1], 1, 20))

Вот пример файла DITA (XML), который ищет XPath:

    <?xml version="1.0" encoding="UTF-8"?>
<topic id="topic_50038EEEBC214A0EBF0660DCFFCF69C6"> 
  <title> Postulated Piping Failures in Fluid Systems Outside of
     Containment</title> 
  <prolog> 
     <author/> 
  </prolog> 
  <body> 
     <p> 
        <b>Definitions</b> 
     </p> 
     <p> 
        <u>Leakage</u> 
     </p> 
     <p>
        <xref
            href="t1.3.2.2_System Quality Group Classifications.dita#topic_AE87340A0F424D07B0E301E243CCB7B2"
            format="dita" scope="local"><?xm-replace_text System Quality Group Classifications?></xref>
        TEXT
     </p> 
     <p> 
        <u> 
        </u>TEXT
        <xref></xref>5.2
     </p>
     </body>
</topic>

В OXYGEN, используя полосу XPath, результат будет «5.2», который я и хочу получить.

Вот C # для извлечения узла:

String xPathFindXREF = "//xref[not(@href)]/normalize-space(substring(following-sibling::text()[1], 1, 20))";
XmlNodeList xmlNodeList = currFile.SelectNodes(xPathFindXREF);

Можно ли использовать функции XPath, такие как normalize-space(), в C #?


person EnglischerZauberer    schedule 16.10.2017    source источник
comment
Возможный дубликат как получить normalize-space () функция xpath для работы?   -  person The Bearded Llama    schedule 16.10.2017


Ответы (1)


Для вашего выражения XPath требуется XPath 2.0, который Oxygen поддерживает, а встроенная библиотека C # - нет.

Кстати, здесь идет речь не о normalize-space() поддержке, поскольку она поддерживается в обеих версиях XPath; это использование normalize-space() как пошаговой функции, а не в предикате, требующем XPath 2.0.

Вы можете использовать библиотеку XPath для C #, которая поддерживает XPath 2.0, или перебирать выбранные узлы XPath через C # и отдельно нормализовать строковые значения каждого узла.

person kjhughes    schedule 16.10.2017
comment
Спасибо. Это был тот ответ, который я искал :). - person EnglischerZauberer; 16.10.2017