我正在解析XML文档以创建另一个XML文档。
文件看起来像这样:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="02_tranformation.xsl"?>
<ROWSET>
<ROW>
<SRC_TABLE>myTable</SRC_TABLE>
<SRC_COLUMN>myColumn</SRC_COLUMN>
</ROW>
</ROWSET>
和02_tranformation.xsl文件是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:output method="text" indent="no" encoding="UTF-8"/>
<xsl:template match="/ROWSET">
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE POWERMART SYSTEM "powrmart.dtd">
</xsl:template>
</xsl:stylesheet>
结果应该是:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE POWERMART SYSTEM "powrmart.dtd">
但结果是
TEMPLATE_ERROR: TRANSFORMATION: ORA-31011: XML parsing failed
ORA-19213: error occurred in XML processing at lines 1
LPX-00209: PI names starting with XML are reserved
我正在寻找许多帮助网站,但我仍然没有说明,这是什么意思。 我不知道它是否重要但是它在Apex应用程序中运行,该应用程序从数据库读取表名(从...中选择),从此结果创建XML并且我正在解析此结果。问题是,此代码在资源管理器中工作,但在此应用程序中不起作用。 有人可以帮我吗? 非常感谢 学家
答案 0 :(得分: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" doctype-system="powrmart.dtd" />
<xsl:template match="/ROWSET">
<POWERMART/>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
产生所需输出的一种方法 - 如果你真的必须将其输出为文本:
.count
当应用于任何XML文档(忽略/未使用)时,结果为:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/*">
<xsl:value-of select=
"'<?xml version="1.0" encoding="UTF-8"?>
'"/>
<xsl:value-of select="'<!DOCTYPE POWERMART SYSTEM "powrmart.dtd">'"/>
</xsl:template>
</xsl:stylesheet>
请注意:但是,不需要XSLT将字符串文字写入输出 - 在C(或任何传统的PL)应用程序中执行此操作。
可以使用<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE POWERMART SYSTEM "powrmart.dtd">
声明输出所需的两行作为XML文档的序言。
只需使用:
<xsl:output>
您无需指定方法,版本和编码属性,因为为这些伪属性生成的默认值XML声明正是您所需要的。