Я хотел бы включить содержимое XML-документа в другой XML-документ и преобразовать его с помощью xmlstarlet+XSLT. Я пытаюсь использовать XInclude. (Я новичок как в XInclude, так и в XSLT.) Однако xmlstarlet не будет обрабатывать включенный XML-документ, он просто оставляет нетронутым узел включения.
Файл a.xml
:
<?xml version="1.0" ?>
<doc xmlns:xi="http://www.w3.org/2001/XInclude">
a
<xi:include href="b.xml" />
b
</doc>
Файл b.xml
:
<?xml version="1.0" ?>
<snippet>
c
</snippet>
Шаблон x.xsl
"сквозной":
<?xml version="1.0" encoding="windows-1250" ?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" />
<xsl:template match="/">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:transform>
Командная строка для запуска:
xmlstarlet tr x.xsl a.xml
И ожидаемый результат будет примерно таким:
<?xml version="1.0" ?>
<doc xmlns:xi="http://www.w3.org/2001/XInclude">
a
<snippet>
c
</snippet>
b
</doc>
Тем не менее, результат, который я получаю:
<?xml version="1.0"?>
<doc xmlns:xi="http://www.w3.org/2001/XInclude">
a
<xi:include href="b.xml"/>
b
</doc>
Теперь, что я делаю неправильно?
xmlstarlet tr --help
- person npostavs   schedule 27.03.2015