У меня проблема с XSLT и неразобранной сущностью в XML. Вот вымышленный сценарий. Сначала я получил XML-файл с именем doc.xml:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE document [
<!ELEMENT document (employee)*>
<!ELEMENT employee (lastname, firstname)>
<!ELEMENT lastname (#PCDATA)>
<!ELEMENT firstname (#PCDATA)>
<!NOTATION FOO SYSTEM 'text/xml'>
<!ENTITY ATTACHMENT SYSTEM 'attach.xml' NDATA FOO>
<!ATTLIST employee
detail ENTITY #IMPLIED>
]>
<document>
<employee detail="ATTACHMENT">
<lastname>Bob</lastname>
<firstname>Kevin</firstname>
</employee>
</document>
В этом XML-файле я использую неразобранную сущность (NDATA) для атрибута «detail» элемента «employee». Файл attach.xml:
<?xml version="1.0" encoding="UTF-8"?>
<name>Bob Kevin</name>
Тогда я хочу использовать XSLT для генерации вывода вместе со вложенным attach.xml. Мой XSLT-файл называется doc.xsl:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="document">
<Document>
<xsl:apply-templates select="employee"/>
</Document>
</xsl:template>
<xsl:template match="employee">
Employee is: <xsl:value-of select="@detail"/>
</xsl:template>
</xsl:stylesheet>
Наконец, я бегу, используя Xalan 2.7.1:
java -jar xalan.jar -IN doc.xml -XSL doc.xsl -OUT docout.xml
Вывод:
<?xml version="1.0" encoding="UTF-8"?>
<Document>
Employee is: ATTACHMENT
</Document>
Это не то, что я хочу. Я хочу, чтобы результат выглядел так:
<?xml version="1.0" encoding="UTF-8"?>
<Document>
Employee is: <name>Bob Kevin</name>
</Document>
Как мне переписать скрипт XSLT, чтобы получить правильный результат?