Упрощение XPath
Я предлагаю вам включить в ваше преобразование объявление с префиксом для пространств имен по умолчанию. Например для
<SearchDocumentsResult xmlns="http://worksite.imanage.com">
вы можете добавить w
префикс в элементе таблицы стилей:
<xsl:stylesheet
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"
xmlns:xs = "http://www.w3.org/2001/XMLSchema"
xmlns:soap = "http://www.w3.org/2003/05/soap-envelope"
xmlns:w = "http://worksite.imanage.com"
exclude-result-prefixes="#all"
version="2.0">
Это облегчит вам выбор элементов в пространстве имен, что позволит избежать совпадения XPath с namespace-uri()
и упростит ваш XPath.
О XPath, насколько ваш выбор должен быть абсолютным? Например, следующее работало так же для меня:
"/soap:Envelope/soap:Body[1]/w:SearchDocumentResult/*[1]/*[1]/*[1]/*[6]/*[1]"
Но вы также можете использовать:
"/soap:Envelope/soap:Body[1]/w:SearchDocumentResult//w:Value[1]"
Удалить пустое пространство имен
Чтобы избавиться от пустого пространства имен, появляющегося в элементе Value
, необходимо исправить таблицу стилей так, чтобы каждый элемент Value
был правильно расположен в пространстве имен. Пример: * +1028 *
<xsl:when test="$iManageExtension eq 'ACROBAT'">
<xsl:element
name="Value"
namespace="http://worksite.imanage.com">
pdf
</xsl:element>
Таким образом, система обычно выводит элемент без пространства имен.
Дополнительные сведения об упрощении XPath
Обратите внимание, что в определенных ситуациях , где в основном вы хотите управлять определенным пространством имен, вы можете просто сделать:
<xsl:stylesheet
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"
xmlns:xs = "http://www.w3.org/2001/XMLSchema"
xmlns:soap = "http://www.w3.org/2003/05/soap-envelope"
exclude-result-prefixes="#all"
xpath-default-namespace="http://worksite.imanage.com"
version="2.0">
и работать без префикса пространства имен.