我的真实代码不是这个,但我在这里陈述的问题适用于我的真实代码。
XML:
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book.child.1>
<title>charithram</title>
<author>sarika</author>
</book.child.1>
<book.child.2>
<title>doublebell</title>
<author>psudarsanan</author>
</book.child.2>
</books>
XSLT 1:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8"
indent="yes" />
<xsl:template match="/">
<xsl:for-each select="books/*">
<newbook>
<title>
<xsl:value-of select="title" />
</title>
</newbook>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
没有为此XSLT生成输出。我正在尝试使用在线工具:http://www.freeformatter.com/xsl-transformer.html
我无法理解什么是错的,最后当我修改XSLT时,如下所示,
XSLT 2:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8"
indent="yes" />
<xsl:template match="/">
<mytag>
<xsl:for-each select="books/*">
<newbook>
<title>
<xsl:value-of select="title" />
</title>
</newbook>
</xsl:for-each>
</mytag>
</xsl:template>
</xsl:stylesheet>
在这种情况下生成输出:
outputXML:
<?xml version="1.0" encoding="UTF-8"?>
<mytag>
<newbook>
<title>charithram</title>
</newbook>
<newbook>
<title>doublebell</title>
</newbook>
</mytag>
你能解释一下这个行为的原因吗?
此外,我不知道如何提出这个问题,所以如果我需要更改问题标题,请编辑或告诉我。
答案 0 :(得分:2)
您的第一个XSLT理论上会产生输出
<?xml version="1.0" encoding="UTF-8"?>
<newbook>
<title>charithram</title>
</newbook>
<newbook>
<title>doublebell</title>
</newbook>
但是那个输出不是有效的XML,因为它有2个根标签,它不是格式良好的XML。
在这种情况下,您可能有以下选择
像在XSLT 2中一样指定根元素
将输出从XML更改为TEXT,但请注意,任何XML程序都无法读取输出