Могу ли я узнать, сколько XML-документа обрабатывается XSL-преобразованием? - PullRequest
1 голос
/ 23 января 2009

У меня довольно большие входные XML-файлы, которые необходимо преобразовать в заданный формат с помощью XSL. Эти XSL-файлы были созданы вручную, и мы хотим убедиться, что каждый непустой текстовый узел в исходном документе учитывается, т. Е. Либо value-of'ed, copy-of'ed, либо считывается и объединяется с что-то еще.

Это вообще возможно? Т.е. можно ли узнать, какая часть входного документа "покрыта" XSL-преобразованием?

Ответы [ 4 ]

2 голосов
/ 24 января 2009

Общий ответ отрицательный .

Также обычно невозможно - реализация менее амбициозной идеи , чтобы найти все текстовые узлы, которым не был сопоставлен ни один шаблон во время выполнения . Это так, потому что даже если соответствующие шаблоны определены, они могут быть выбраны для обработки только в результате <xsl:apply-templates> с атрибутом "select", который выбирает конкретные текстовые узлы.

Анализировать, выполняется ли это во время выполнения, вообще невозможно.

В общем случае также невозможно проанализировать каждое выражение XPath, используемое в атрибуте select из <xsl:value-of/> и <xsl:copy-of>, поскольку такое выражение может содержать переменную xsl, и мы должны знать содержимое этой переменной во время выполнения, чтобы определить, какие узлы будут выбраны.

1 голос
/ 23 января 2009

Лучшее, что я могу придумать сейчас, это добавить что-то вроде этого в конец вашего xsl:

<xsl:template match="text()[normalize-space()]">
  To battle stations!
  This sneaky tag tried to escape: <xsl:value-of select="name(..)"/>
</xsl:template>

Но это действительно зависит от того, будет ли <xsl:apply-templates/> вызываться во всех нужных местах и, вероятно, не будет делать это для нетривиальных таблиц стилей ...

0 голосов
/ 23 января 2009

Единственный способ сделать это в прошлом - пройти XSL с таким продуктом, как Altova XMLSpy . Конечно, это очень утомительно для больших документов XSL и XML, но иногда приходится выяснять, что происходит с преобразованиями.

0 голосов
/ 23 января 2009

Вы можете извлечь весь текст из исходного Xml и затем выполнить поиск, если эти строки находятся в результирующем документе. Это не является доказательством того, что на самом деле все было преобразовано, но вы можете обнаружить некоторые явно недостающие части.

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