У меня есть документ XML с элементами, не содержащими имен, и я хочу использовать XSLT для добавления им пространств имен. Большинство элементов будут в пространстве имен A; некоторые из них будут в пространстве имен B. Как мне это сделать?Добавить пространство имен в элементы
ответ
С foo.xml
<foo x="1">
<bar y="2">
<baz z="3"/>
</bar>
<a-special-element n="8"/>
</foo>
и foo.xsl
<xsl:template match="*">
<xsl:element name="{local-name()}" namespace="A" >
<xsl:copy-of select="attribute::*"/>
<xsl:apply-templates />
</xsl:element>
</xsl:template>
<xsl:template match="a-special-element">
<B:a-special-element xmlns:B="B">
<xsl:apply-templates match="children()"/>
</B:a-special-element>
</xsl:template>
</xsl:transform>
я
<foo xmlns="A" x="1">
<bar y="2">
<baz z="3"/>
</bar>
<B:a-special-element xmlns:B="B"/>
</foo>
Это то, что вы ищете?
Вот что я до сих пор:
<xsl:template match="*">
<xsl:element name="{local-name()}" namespace="A" >
<xsl:apply-templates />
</xsl:element>
</xsl:template>
<xsl:template match="a-special-element">
<B:a-special-element xmlns:B="B">
<xsl:apply-templates />
</B:a-special-element>
</xsl:template>
Это почти работает; проблема в том, что это не копирование атрибутов. Из того, что я прочитал так, элемент xsl: не имеет способа скопировать все атрибуты из элемента as-is (use-attribute-sets, по-видимому, не сокращает его).
Вы не прочли правильную документацию. Используйте силу, прочитайте спецификацию, она очень хорошо написана и доступна. – ddaa 2008-09-27 23:39:23
Вам понадобятся два основных ингредиента для этого рецепта.
Соус для соусов будет identity transform, а основной аромат будет присвоен атрибутом namespace
до xsl:element
.
Следующий, непроверенный код должен добавить пространство имен http://example.com/ ко всем элементам.
<xsl:template match="*">
<xsl:element name="xmpl:{local-name()}" namespace="http://example.com/">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
Личное сообщение: Hello, Jeni Tennison. Я знаю, что вы читаете это.
- 1. Скопировать все, добавить элементы в другое пространство имен, объявить пространство имен в корневом узле
- 2. добавить пространство имен в javascript
- 3. Rails: добавить пространство имен ресурсов
- 4. Как добавить простое пространство имен?
- 5. Добавить пространство имен узла XML
- 6. Пространство имен не может содержать непосредственно элементы?
- 7. Как добавить пространство имен в модели MVC
- 8. Как добавить пространство имен в CompilerParameters
- 9. PHP: Добавить объект в пространство имен globale
- 10. Как добавить новое пространство имен в C#
- 11. Добавить объекты в пространство имен пакетов
- 12. добавить пространство имен в атрибут java dom
- 13. Как добавить пространство имен атрибута в LXML
- 14. Как добавить класс в пользовательское пространство имен?
- 15. Добавить PostSharp Aspect в пространство имен System.IO?
- 16. Как добавить пространство имен sitemesh3 в jsp?
- 17. Как добавить имя в пространство имен?
- 18. Как добавить пространство имен в следующий xml?
- 19. Добавить пространство имен в пользовательский файл XML
- 20. Добавить объекты в пространство имен C++
- 21. добавить пространство имен и префикс в xml
- 22. Форма без модели, добавить в пространство имен
- 23. Как добавить пространство имен в Symfony 2.1?
- 24. Как добавить пространство имен в файл aspx?
- 25. Добавить пользовательское пространство имен в web.config?
- 26. Как добавить папку в пространство имен программы?
- 27. Добавить пространство имен в xml, сгенерированное запросом
- 28. XML, глобальные элементы и пространство имен
- 29. целевое пространство имен схемы
- 30. Пространство имен элемента, объявляющего пространство имен?
Yup; Я подошел к ответу до вашего поста, и это было практически то же самое. Единственное отличие состоит в том, что вместо этого я использую , но я считаю, что они функционально идентичны. –
2008-09-28 00:01:09