Преобразуйте и комбинируйте * .xml - PullRequest
4 голосов
/ 08 января 2009

Я хочу извлечь серию отношений из XML-файлов и преобразовать их в график, который я генерирую с помощью точки. Очевидно, я могу сделать это с помощью языка сценариев, но мне было любопытно, возможно ли это с xslt. Что-то вроде:

xsltproc dot.xsl *.xml

, который выдает файл типа

diagraph {
 state -> state2
 state2 -> state3
 [More state relationships from *.xml files]
}

Так что мне нужно и 1) обернуть объединенные xml-преобразования "diagraph {...}", и 2) иметь возможность обрабатывать произвольный набор xml-документов, указанных в командной строке.

Возможно ли это? Есть указатели?

Ответы [ 2 ]

8 голосов
/ 08 января 2009

Используя процессор XSLT 2.0 и функцию collection(), это действительно просто .

Ниже приведен пример использования Saxon :

<xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
    <xsl:output omit-xml-declaration="yes" indent="yes"/>

    <xsl:param name="pDirName" select="'D:/Temp/xmlFilesDelete'"/>

    <xsl:template match="/">
    <wrap>
        <xsl:apply-templates select=
         "collection(
                    concat('file:///',
                            $pDirName,
                            '?select=*.xml;recurse=yes;on-error=ignore'
                             )
                         )/*
          "/>
      </wrap>
    </xsl:template>

    <xsl:template match="*">
      <xsl:copy-of select="."/>
    </xsl:template>
</xsl:stylesheet>

Когда это преобразование применяется к любому документу XML (не используется), он обрабатывает все файлы XML в поддереве файловой системы, начиная с каталога, значение которого определяется глобальным параметром $pDirName ,

На момент применения этого преобразования было только два xml-файла :

<apples>3</apples>

и

<oranges>3</oranges>

Получен правильный результат :

<wrap>
   <apples>3</apples>
   <oranges>3</oranges>
</wrap>

Это самый простой пример, который можно построить. Чтобы полностью ответить на вопрос, каталог можно указать в командной строке, вызывая Saxon. Подробнее о способах вызова Saxon из командной строки здесь .

2 голосов
/ 30 января 2010

Возможно, вы захотите посмотреть (http://martin -loetzsch.de / DOTML / ). Он использует xslt для генерации точечного синтаксиса из XML-документов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...