Создать список путей изображений в документах XML
У меня есть XML-документ, который включает в себя другие XML-файлы. Все эти XML-файлы содержат относительные пути для изображений, которые находятся в разных местах источника.
<chapter xml:id="chapter1">
<title>First chapter in Main Document</title>
<section xml:id="section1">
<title>Section 1 in Main Document</title>
<para>this is paragraph<figure>
<title>Car images</title>
<mediaobject>
<imageobject>
<imagedata fileref="images/image1.jpg"/>
</imageobject>
</mediaobject>
</figure></para>
</section>
<xi:include href="../doc/section2.xml"/>
<xi:include href="../doc/section3.xml"/>
</chapter>
Здесь будут выглядеть XML-документы section2 и section3.
<section xml:id="section2"
<title>Main Documentation Section2</title>
<para>This is also paragraph <figure>
<title>Different Images</title>
<mediaobject>
<imageobject>
<imagedata fileref="images/image2.jpg"/>
</imageobject>
</mediaobject>
</figure></para>
</section>
Я хочу создать таблицу стилей XSLT 1.0, которая будет генерировать список путей к изображениям во всех XML-документах. Я собираюсь скопировать те изображения, которые находятся в разных местах источника в одну папку изображений. Затем я смогу использовать этот список путей к изображениям для копирования этих изображений. И было бы здорово, если бы этот список путей к изображениям сохранялся в структуре, доступ к которой можно получить с помощью класса Java.
В настоящее время я использую XSLT, который я получаю из другого вопроса. Но этот XSLT дает значения других узлов вместе с путями изображения. Я пробовал много фильтровать их, изменяя значения шаблонов.
<xsl:template match="*">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="xi:include[@href][@parse='xml' or not(@parse)]">
<xsl:apply-templates select="document(@href)" />
</xsl:template>
Ожидаемый список результатов будет что-то вроде,
/home/vish/test/images/image1.jpg
/home/vish/test/doc/other/images/image2.jpg
/home/vish/test2/other/images/image3.jpg
Заранее спасибо..!!
1 ответ
Как насчет...
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xi="http://www.w3.org/2001/XInclude"
exclude-result-prefixes="xsl xi">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*" />
<xsl:template match="/">
<image-paths>
<xsl:apply-templates select="*" />
</image-paths>
</xsl:template>
<xsl:template match="*">
<xsl:apply-templates select="*" />
</xsl:template>
<xsl:template match="imagedata">
<imagedata fileref="{@fileref}" />
</xsl:template>
<xsl:template match="xi:include[@href][@parse='xml' or not(@parse)]">
<xsl:apply-templates select="document(@href)" />
</xsl:template>
</xsl:stylesheet>
Вы должны получить вывод, как...
<image-paths>
<imagedata fileref="path1/image1.jpg" />
<imagedata fileref="path2/image2.jpg" />
<imagedata fileref="path3/image3.jpg" />
</image-paths>