我必须将xml文件转换为dtd一致的xml文件...因此我必须编写一个xslt-sheet ... 这是xml文件:
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<!DOCTYPE autoren SYSTEM "autoren.dtd">
<autoren>
<autor>
<nachname>Prudhomme</nachname>
<vorname>Sully</vorname>
<nobelpreis>1901</nobelpreis>
<sprache>französisch</sprache>
<buch>
<titel>t1888</titel>
<erscheinungsjahr>1888</erscheinungsjahr>
</buch>
</autor>
<autor>
<nachname>Hauptmann</nachname>
<vorname>Gerhard</vorname>
<nobelpreis>1912</nobelpreis>
<sprache>deutsch</sprache>
<buch>
<titel>t1900</titel>
<erscheinungsjahr>1900</erscheinungsjahr>
</buch>
<buch>
<titel>t1901</titel>
<erscheinungsjahr>1901</erscheinungsjahr>
</buch>
</autor>
<autor>
<nachname>France</nachname>
<vorname>Anatol</vorname>
<nobelpreis>1921</nobelpreis>
<sprache>französisch</sprache>
<buch>
<titel>t1900</titel>
<erscheinungsjahr>1900</erscheinungsjahr>
</buch>
</autor>
<autor>
<nachname>Lagerlöf</nachname>
<vorname>Selma</vorname>
<nobelpreis>1909</nobelpreis>
<sprache>schwedisch</sprache>
<buch>
<titel>t1900</titel>
<erscheinungsjahr>1900</erscheinungsjahr>
</buch>
</autor>
<autor>
<nachname>Hemingway</nachname>
<vorname>Ernest</vorname>
<nobelpreis>1954</nobelpreis>
<sprache>englisch</sprache>
<buch>
<titel>t1965</titel>
<erscheinungsjahr>1965</erscheinungsjahr>
</buch>
<buch>
<titel>t1951</titel>
<erscheinungsjahr>1951</erscheinungsjahr>
</buch>
</autor>
<autor>
<nachname>Cornwell</nachname>
<vorname>Patricia</vorname>
<sprache>englisch</sprache>
<buch>
<titel>From Potter's Field</titel>
<erscheinungsjahr>1995</erscheinungsjahr>
</buch>
<buch>
<titel>t1995</titel>
<erscheinungsjahr>1995</erscheinungsjahr>
</buch>
</autor>
<autor>
<nachname>Böll</nachname>
<vorname>Heinrich</vorname>
<nobelpreis>1972</nobelpreis>
<sprache>deutsch</sprache>
<buch>
<titel>t1969</titel>
<erscheinungsjahr>1969</erscheinungsjahr>
</buch>
<buch>
<titel>t1965</titel>
<erscheinungsjahr>1965</erscheinungsjahr>
</buch>
</autor>
<autor>
<nachname>Gide</nachname>
<vorname>André</vorname>
<nobelpreis>1947</nobelpreis>
<sprache>französisch</sprache>
<buch>
<titel>t1945</titel>
<erscheinungsjahr>1945</erscheinungsjahr>
</buch>
</autor>
<autor>
<nachname>Mann</nachname>
<vorname>Thomas</vorname>
<nobelpreis>1929</nobelpreis>
<sprache>deutsch</sprache>
<buch>
<titel>t1930</titel>
<erscheinungsjahr>1930</erscheinungsjahr>
</buch>
<buch>
<titel>t1910</titel>
<erscheinungsjahr>1910</erscheinungsjahr>
</buch>
</autor>
<autor>
<nachname>Mann</nachname>
<vorname>Heinrich</vorname>
<sprache>deutsch</sprache>
<buch>
<titel>t1920</titel>
<erscheinungsjahr>1920</erscheinungsjahr>
</buch>
</autor>
<autor>
<nachname>Faulkner</nachname>
<vorname>William</vorname>
<nobelpreis>1949</nobelpreis>
<sprache>englisch</sprache>
<buch>
<titel>t1930</titel>
<erscheinungsjahr>1930</erscheinungsjahr>
</buch>
<buch>
<titel>t1932</titel>
<erscheinungsjahr>1932</erscheinungsjahr>
</buch>
</autor>
</autoren>
这是我的.dtd表格:
<?xml version="1.0" encoding="iso-8859-1" ?>
<!ELEMENT bücher (buch*)>
<!ELEMENT buch (titel, erscheinungsjahr, autor)>
<!ATTLIST buch sprache CDATA #REQUIRED>
<!ELEMENT autor (nachname, vorname)>
<!ATTLIST autor nobelpreis CDATA #IMPLIED>
<!ELEMENT vorname (#PCDATA)>
<!ELEMENT nachname (#PCDATA)>
<!ELEMENT titel (#PCDATA)>
<!ELEMENT erscheinungsjahr (#PCDATA)>
<!ELEMENT nobelpreis (#PCDATA)>
<!ELEMENT sprache (#PCDATA)>
我现在做了什么:
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output encoding="ISO-8859-1" indent="yes" method="xml" />
<xsl:template match="autoren">
<bücher>
<xsl:apply-templates select="autor">
<xsl:sort select="erscheinungsjahr" order="ascending" data-type="number"/>
<xsl:sort select="nachname"/>
</xsl:apply-templates>
</bücher>
</xsl:template>
<xsl:template match="autor">
<buch>
<Name>
<xsl:value-of select="nachname"/>
</Name>
<Vorname>
<xsl:value-of select="vorname"/>
</Vorname>
<JahrNobelpreis>
<xsl:apply-templates select="nobelpreis" />
</JahrNobelpreis>
</buch>
</xsl:template>
</xsl:stylesheet>
有人知道如何实现这个目标吗?
答案 0 :(得分:0)
以下XSLT执行所需的转换:
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output encoding="ISO-8859-1" indent="yes" method="xml" />
<xsl:template match="autoren">
<bücher>
<xsl:apply-templates select="autor/buch">
<xsl:sort select="erscheinungsjahr" order="ascending" data-type="number"/>
<xsl:sort select="../nachname"/>
</xsl:apply-templates>
</bücher>
</xsl:template>
<xsl:template match="buch">
<buch>
<xsl:attribute name="sprache">
<xsl:value-of select="../sprache"/>
</xsl:attribute>
<titel><xsl:value-of select="titel"></xsl:value-of></titel>
<erscheinungsjahr><xsl:value-of select="erscheinungsjahr"></xsl:value-of></erscheinungsjahr>
<autor>
<xsl:attribute name="nobelpreis">
<xsl:value-of select="../nobelpreis"/>
</xsl:attribute>
<nachname><xsl:value-of select="../nachname"/></nachname>
<vorname><xsl:value-of select="../vorname"/></vorname>
</autor>
</buch>
</xsl:template>
</xsl:stylesheet>
生成此输出,该输出应与上述DTD一致
<?xml version="1.0" encoding="ISO-8859-1"?>
<bücher>
<buch sprache="französisch">
<titel>t1888</titel>
<erscheinungsjahr>1888</erscheinungsjahr>
<autor nobelpreis="1901">
<nachname>Prudhomme</nachname>
<vorname>Sully</vorname>
</autor>
</buch>
<buch sprache="französisch">
<titel>t1900</titel>
<erscheinungsjahr>1900</erscheinungsjahr>
<autor nobelpreis="1921">
<nachname>France</nachname>
<vorname>Anatol</vorname>
</autor>
</buch>
<buch sprache="deutsch">
<titel>t1900</titel>
<erscheinungsjahr>1900</erscheinungsjahr>
<autor nobelpreis="1912">
<nachname>Hauptmann</nachname>
<vorname>Gerhard</vorname>
</autor>
</buch>
<buch sprache="schwedisch">
<titel>t1900</titel>
<erscheinungsjahr>1900</erscheinungsjahr>
<autor nobelpreis="1909">
<nachname>Lagerlöf</nachname>
<vorname>Selma</vorname>
</autor>
</buch>
<buch sprache="deutsch">
<titel>t1901</titel>
<erscheinungsjahr>1901</erscheinungsjahr>
<autor nobelpreis="1912">
<nachname>Hauptmann</nachname>
<vorname>Gerhard</vorname>
</autor>
</buch>
<buch sprache="deutsch">
<titel>t1910</titel>
<erscheinungsjahr>1910</erscheinungsjahr>
<autor nobelpreis="1929">
<nachname>Mann</nachname>
<vorname>Thomas</vorname>
</autor>
</buch>
<buch sprache="deutsch">
<titel>t1920</titel>
<erscheinungsjahr>1920</erscheinungsjahr>
<autor nobelpreis="">
<nachname>Mann</nachname>
<vorname>Heinrich</vorname>
</autor>
</buch>
<buch sprache="englisch">
<titel>t1930</titel>
<erscheinungsjahr>1930</erscheinungsjahr>
<autor nobelpreis="1949">
<nachname>Faulkner</nachname>
<vorname>William</vorname>
</autor>
</buch>
<buch sprache="deutsch">
<titel>t1930</titel>
<erscheinungsjahr>1930</erscheinungsjahr>
<autor nobelpreis="1929">
<nachname>Mann</nachname>
<vorname>Thomas</vorname>
</autor>
</buch>
<buch sprache="englisch">
<titel>t1932</titel>
<erscheinungsjahr>1932</erscheinungsjahr>
<autor nobelpreis="1949">
<nachname>Faulkner</nachname>
<vorname>William</vorname>
</autor>
</buch>
<buch sprache="französisch">
<titel>t1945</titel>
<erscheinungsjahr>1945</erscheinungsjahr>
<autor nobelpreis="1947">
<nachname>Gide</nachname>
<vorname>André</vorname>
</autor>
</buch>
<buch sprache="englisch">
<titel>t1951</titel>
<erscheinungsjahr>1951</erscheinungsjahr>
<autor nobelpreis="1954">
<nachname>Hemingway</nachname>
<vorname>Ernest</vorname>
</autor>
</buch>
<buch sprache="deutsch">
<titel>t1965</titel>
<erscheinungsjahr>1965</erscheinungsjahr>
<autor nobelpreis="1972">
<nachname>Böll</nachname>
<vorname>Heinrich</vorname>
</autor>
</buch>
<buch sprache="englisch">
<titel>t1965</titel>
<erscheinungsjahr>1965</erscheinungsjahr>
<autor nobelpreis="1954">
<nachname>Hemingway</nachname>
<vorname>Ernest</vorname>
</autor>
</buch>
<buch sprache="deutsch">
<titel>t1969</titel>
<erscheinungsjahr>1969</erscheinungsjahr>
<autor nobelpreis="1972">
<nachname>Böll</nachname>
<vorname>Heinrich</vorname>
</autor>
</buch>
<buch sprache="englisch">
<titel>From Potter's Field</titel>
<erscheinungsjahr>1995</erscheinungsjahr>
<autor nobelpreis="">
<nachname>Cornwell</nachname>
<vorname>Patricia</vorname>
</autor>
</buch>
<buch sprache="englisch">
<titel>t1995</titel>
<erscheinungsjahr>1995</erscheinungsjahr>
<autor nobelpreis="">
<nachname>Cornwell</nachname>
<vorname>Patricia</vorname>
</autor>
</buch>
</bücher>