Синтаксический анализ текста в формате Word из XML-документа в приложениях Azure Logic

#xml #xml-parsing #azure-logic-apps

#xml #синтаксический анализ xml #azure-logic-apps

Вопрос:

Я пытаюсь проанализировать XML-файлы из библиотеки форм SharePoint, где пользователь скопировал / вставил форматированный текст документа Word в текстовое поле. Результатом является XML внутри XML. У меня возникли проблемы с получением содержимого, но с помощью другого вопроса этот синтаксис сработал xpath(xml(outputs('Get_file_content')?['body']),'//*[local-name()="myFields"]//following-sibling::*[local-name()="Request_Description"]')[0] . Результат выглядит примерно так

 <my:Request_Description xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2017-05-05T14:19:13">
  <xhtml:html xml:space="preserve" xmlns="http://www.w3.org/1999/xhtml" xmlns:xhtml="http://www.w3.org/1999/xhtml">
    <xhtml:div>
      <xhtml:font size="1" face="CIDFont F6">
        <xhtml:font size="1" face="CIDFont F6">
          <xhtml:p>This is where the request description goes and the result we want</xhtml:p>
</xhtml:font>
      </xhtml:font>
    </xhtml:div>
</xhtml:html>
</my:Request_Description>
  

Как мне просто извлечь текст для описания? Мне интересно, нужно ли скорректировать мое первое xpath утверждение, чтобы не возвращать весь элемент.

ОБНОВЛЕНИЕ — я не упомянул, что приведенное выше было лишь одним примером пользовательского ввода в это поле, и каждая форма будет отличаться. Например, вот еще один пример того, что можно найти в этом поле.

 <my:Request_Description xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2017-05-05T14:19:13">
  <xhtml:html xml:space="preserve" xmlns="http://www.w3.org/1999/xhtml" xmlns:xhtml="http://www.w3.org/1999/xhtml">
    <xhtml:div>test random double quote inside title "here" test and carriage<xhtml:br />return</xhtml:div>
</xhtml:html>
</my:Request_Description>
  

Это вызвано элементом управления RTF в форме, в котором пользователь может ввести текстовое поле в форме, и элемент управления преобразует его в XML, который вы видите. Поскольку нет согласованности, мне интересно xpath , не является ли использование жизнеспособным вариантом, но я не уверен, что еще можно сделать.

Ответ №1:

Вы можете использовать это выражение:

 xpath(xml(outputs('Get_file_content')?['body']), 'string(/*[local-name()="Request_Description"]/*[local-name()="html"]/*[local-name()="div"]/*[local-name()="font"]/*[local-name()="font"]/*[local-name()="p"])')
  

Вы можете обратиться к этому официальному документу, чтобы узнать о конкретном использовании xpath .

======================== обновление===========================

Вы можете использовать trim, а затем использовать это выражение:

 trim(xpath(xml(outputs('Get_file_content')?['body']), 'string(/*[local-name()="Request_Description"])'))
  

Комментарии:

1. Спасибо, это было полезно, и это работает, но мне нужно обновить свой вопрос, поскольку я забыл упомянуть, что каждая форма XML имеет разное содержимое, и, следовательно xpath , синтаксис изменится. Я начинаю думать, что это возможно не для всех ситуаций. Смотрите Мои изменения в вопросе для другого примера того, что я имею в виду.

2. Привет, @pretzelb. Я обновил свой ответ, это выражение должно решить вашу проблему.

3. Если только некоторые теги стиля, то это выражение не должно быть проблемой.