Объекты с пространством имен не работают в Edge и IE - PullRequest
0 голосов
/ 05 января 2019

У меня есть один файл XML и его файл преобразования XSL:

simple.xml * * 1004

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="simple.xsl"?>

<!DOCTYPE simple [
  <!ENTITY ie "<expan>id est</expan>">
]>

<text xmlns="http://www.tei-c.org/ns/1.0">
  I am happy &ie; I am not upset.
</text>

simple.xsl

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet
  version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:n="http://www.tei-c.org/ns/1.0"
>
  <xsl:template match="/">
    <xsl:apply-templates select="//n:text" />
  </xsl:template>

  <xsl:template match="n:text">
    <html> 
      <body>
        <xsl:apply-templates />
      </body>
    </html>
  </xsl:template>

  <xsl:template match="n:expan">
    <span style="color: red;"><xsl:apply-templates /></span>
  </xsl:template>
</xsl:stylesheet>

Когда я открываю файл XML в Firefox, корректно генерируется диапазон:

enter image description here

Но в Edge и Internet Explorer шаблон n:expan не применяется, поэтому id est не входит в диапазон и не записывается красным:

Edge

Когда я удаляю пространство имен и все префиксы n:, это хорошо работает в Edge и IE. Кроме того, когда я удаляю сущность ie и пишу напрямую I am happy <expan>id est</expan> I am not upset., она работает в обоих браузерах.

Как мне сделать так, чтобы он работал как с сущностями, так и с пространством имен?

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 05 января 2019

Очевидно, у разных процессоров разные представления о том, к какому пространству имен принадлежит элемент expan. В моих собственных тестах я вижу, что Saxon и Xalan помещают его в пространство имен своего родителя text, тогда как libxslt считает, что оно находится в пространстве без имен.

Как мне сделать так, чтобы он работал как с сущностями, так и с пространством имен?

Как насчет:

<xsl:template match="expan | n:expan">
...