#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. Если только некоторые теги стиля, то это выражение не должно быть проблемой.