я получил xml-файлы с "xsi:schemaLocation="location1 location2..." и много "xmlns:someNs". Хотя пространства имен будут скопированы в новый документ, schemaLocations нет, и я действительно не могу понять, почему они удаляются (все пространства имен и schemaLocations также находятся в моей таблице стилей).
Google говорит, что они будут удалены, если они не используются внутри документа или что-то в этом роде, и я должен добавить их сам, но, похоже, я не могу... Я использую конвейер xalan для передачи некоторых элементарных преобразований, и теперь Я пытаюсь добавить таблицу стилей в конец канала, чтобы снова добавить местоположения. это мой последний лист:
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/*">
<xsl:attribute name="xsi:schemaLocation">
<xsl:text>MYLOCATION</xsl:text>
</xsl:attribute>
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
У меня было несколько вариантов с тегом элемента, окружающим без копии... лучшим результатом был удвоенный корневой элемент, один со schemaLocation и один со всеми пространствами имен, которые я действительно не могу понять.
Спасибо за любую помощь ;)
€: Кажется, что все мои отдельные таблицы стилей работают, кроме xalan pipe.
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:pipe="http://xml.apache.org/xalan/PipeDocument"
extension-element-prefixes="pipe"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="someschema"
>
<xsl:param name="source"/>
<xsl:param name="target"/>
<!-- I think this block has no effect -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/">
<pipe:pipeDocument
source="{$source}"
target="{$target}">
<stylesheet href="sheet1.xsl"/>
<stylesheet href="sheet2.xsl"/>
<stylesheet href="sheet3.xsl"/>
</pipe:pipeDocument>
</xsl:template>
</xsl:stylesheet>
Xalan больше не вызывается с -IN и -OUT, и я думаю, что именно здесь я теряю свои местоположения, хотя я не понимаю, почему объявления xmlns все еще находятся в выводе. Каждый лист выполняет собственное преобразование идентичности и работает должным образом, если используется без канала.