У меня есть xml, сгенерированный веб-сервисом на основе openerp, он содержит префикс pp для многих элементов. Я хочу преобразовать этот xml-файл в другой xml, используя xslt, выбрав много элементов. Когда я пытаюсь выполнить преобразование, он показывает мне ошибку «префикс xsl для элемента не связан» для префикса pp. Я не могу объявить pp, как описано во многих ответах, как я могу игнорировать использование этого префикса?XSLT префикс xsl для элемента не связан
ответ
Я нашел решение этой проблемы. мы можем использовать этот XSLT-преобразование, чтобы игнорировать все пространства имен и префиксы в нашем файле XML:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()[not(self::*)]">
<xsl:copy/>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="node()|@*"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
XPath предоставляет синтаксис pp:*
для выбора всех элементов/атрибутов с определенным URI пространства имен независимо от их локальных имен, но не (напрямую), чтобы выбрать все элементы/атрибуты с определенным локальным именем независимо от пространства имен. Если вы не знаете заранее, что пространство имен URI будет то вместо
pp:foo/pp:bar
вы должны использовать трюки, как
*[local-name() = 'foo']/*[local-name() = 'bar']
Тот факт, что документ использует «рр» как префикс не имеет значения, что важно для XPath и XSLT (и для любых других инструментов XML-обработки, поддерживающих пространство имен) - это локальное имя элемента и его URI пространства имен. Префикс - это просто устройство, позволяющее синтаксическому анализатору присоединить правильный URI пространства имен к каждому узлу.
Где я могу написать эту строку * [local-name() = 'foo']/* [local-name() = 'bar'] , потому что я не могу контролировать, как генерируется XML-файл, этот XSLT будет использоваться в ESB, поэтому это будет просто сообщение, и я буду применять этот XSLT на нем. – Rida
@Rida вы должны использовать этот трюк во всех выражениях 'select' и' match', которые относятся к элементам с пространством имен переменных. Невозможно быть более конкретным, не видя примера XML и вашего текущего XSLT. –
Спасибо за ваш ответ Я нашел решение моей проблемы – Rida
- 1. Префикс «ldaptive» для элемента не связан
- 2. XmlBeanDefinitionStoreExceptionException: префикс «beans» для элемента «beans: bean» не связан
- 3. «Префикс« xliff »для элемента« xliff: g »не связан»
- 4. Spring «Префикс« tx »для элемента« tx: annotation-driven »не связан».
- 5. Ошибка: префикс «xsd» для элемента «xsd: schema» не связан
- 6. Префикс «xsd» для элемента «xsd: schema» не связан
- 7. Тип Префикс «mvc» для элемента «mvc: annotation-driven» не связан
- 8. Префикс для элемента, не связанного
- 9. Ошибка проверки схемы xml «префикс не связан»
- 10. XSLT: XSL: функция не будет работать
- 11. SAXParseException: префикс «xsi» для атрибута «xsi: schemaLocation» не связан
- 12. xsi: schema Тип элемента списка не связан
- 13. Приставки "безопасность" для элемента "безопасности: HTTP" не связан
- 14. Как заставить XSL игнорировать префикс xmlns при тестировании элемента XML
- 15. XSLT XSL: копирование и XSL: для-каждый по атрибутам
- 16. Что такое «Префикс« vm »для элемента« vm: endpoint »не связан». означает и как его решить?
- 17. Префикс «pt» для атрибута «pt: data-inset», связанный с типом элемента «p: dataList», не связан
- 18. Spring 3.0: «Префикс« X »для атрибута« Y », связанный с типом элемента« Z », не связан»
- 19. javax.faces.view.facelets.FaceletException: Анализ ошибок /my.xhtml: ошибка. Трассировка [строка: 42] Префикс «f» для элемента «f: facet» не связан
- 20. Префикс «andriod» для атрибута «andriod: name», связанный с типом элемента «приложение», не связан?
- 21. Префикс «xsi» для атрибута «xsi: schemaLocation» Связанный с типом элемента «store-inventory» не связан
- 22. Префикс пространства имен XSLT, бросающий ошибку процессора
- 23. xslt для управления значением элемента перед отображением?
- 24. XML + XSL для XSLT для HTML
- 25. XSL: Удалить префикс пространства имен
- 26. XSLT - xsl выбрать
- 27. XSL для каждого для элемента
- 28. XSL Из XML. XSLT
- 29. Ошибка: Приставка «безопасности» для элемента «безопасности: аутентификация-провайдер» не связан
- 30. Префикс сложения (не пространства имен) в XSLT
«Я не могу объявить С., как это описано во многих ответах» - почему бы и нет? Правильный подход к этой проблеме заключается в сопоставлении URI с подходящим префиксом в таблице стилей. –
, потому что у меня нет URI для этого префикса, его автоматически генерируется с openerp. – Rida