Saxon处理器处理XML的转换(带查询数据库的),hold不住了,大家帮帮我吧

Element 2011-09-01 05:03:28
原XSLT文件,加载本地文件作为参数

<!-- set output -->
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<!-- load other xml as param-->
<xsl:param name="Articles2" select="'../Articles.xml'"/>
<!-- 这里加载的本地文件 -->
<xsl:param name="ShortPO2" select="'../ShortPO.xml'"/>


现在想把上面文件的选择属性,选择从数据库中查询一个XML出来。

这里定义一个模版访问数据(访问数据库是正常的),查询XML,作为参数

<xsl:param name="ShortPO2">
<xsl:variable name="xsltstr">
<!-- 调用模版 -->
<xsl:call-template name="getXSLT">
<!-- 设置参数 -->
<xsl:with-param name="jdbc.driver">com.microsoft.sqlserver.jdbc.SQLServerDriver</xsl:with-param>
<xsl:with-param name="jdbc.database" as="xsd:string" select="string('jdbc:sqlserver://localhost:1433;databaseName=CnnTest')"/>
<xsl:with-param name="table" select="string('dbo.xslt')"/>
<xsl:with-param name="where" select="string('id=2')"/>
</xsl:call-template>
</xsl:variable>
<xsl:value-of select="string($xsltstr)"/>
</xsl:param>

<xsl:template match="/">
<!-- 输出参数的值 -->
<xsl:value-of select="$ShortPO2"/>
</xsl:template>


当output method="xml" 时候,输出结果就是下面这个样子

<?xml version="1.0" encoding="UTF-8"?>
<ShortPO xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ShortPO.xsd">
<CustomerNr>3</CustomerNr>
<LineItems>
<LineItem>
<ArticleNr>3</ArticleNr>
<Amount>5</Amount>
</LineItem>
<LineItem>
<ArticleNr>1</ArticleNr>
<Amount>17</Amount>
</LineItem>
</LineItems>
</ShortPO>


当output method 设置为 text时候,输出正常为一个标准的XML。

<?xml version="1.0" encoding="UTF-8"?>
<ShortPO xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ShortPO.xsd">
<CustomerNr>3</CustomerNr>
<LineItems>
<LineItem>
<ArticleNr>3</ArticleNr>
<Amount>5</Amount>
</LineItem>
<LineItem>
<ArticleNr>1</ArticleNr>
<Amount>17</Amount>
</LineItem>
</LineItems>
</ShortPO>


但是我现在需要将output method为xml,但输出结果是一个正常的XML,该怎么做啊?

有什么xpath的函数,或者xsl有什么函数呢?可以将上面那个不是XML文件转换为XML文件。
求个方案,或者方法!hold 不住了!
...全文
171 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
fyswords 2011-09-16
  • 打赏
  • 举报
回复
单就这个例子而言
<xsl:param select="<?xml version="1.0" encd?><ShortPO>.......</ShortPO>">


select的内容必须是XPath表达式
http://www.w3.org/TR/xslt#variables

具体产生式都能是什么形式有点儿乱,没看出来可以产生完整XML文档内容,你看看有没有用
http://www.w3.org/TR/xpath/#NT-Expr
Element 2011-09-16
  • 打赏
  • 举报
回复
你没有理解我的意思,是这样的!
1.这里字符串是一个本地文件,这个标签的java实现类会去解析这个字符串,把这个字符串解析为一个本地的uri,然后根据这个uri去加载这个文件。
2.但是我想要的是 <xsl:param select="<?xml version="1.0" encd?><ShortPO>.......</ShortPO>">
这样的一个方式,但是这样后台java类是解析不了的。报错。因为这个不是一个有效的URI。也就是说参数类型错误啦。
3.现在的需求就是怎样实现这样一个直接加载XML字符串,而不是加载文件。因为这个文件实际不存在的,是我从数据库中查询出来的一个字符串。现在我的思路是这样的,或者还有其它的思路,请教了!


问题有点啰嗦,请见谅了!
[Quote=引用 7 楼 fyswords 的回复:]

XML code
<xsl:param name="ShortPO2" select="'../ShortPO.xml'"/>

这里面被单引号包着的不就是字符串吗?
[/Quote]

Element 2011-09-16
  • 打赏
  • 举报
回复
我QQ:1105249192,方便的话,我们交流交流!
[Quote=引用 9 楼 fyswords 的回复:]

单就这个例子而言
XML code
<xsl:param select="<?xml version="1.0" encd?><ShortPO>.......</ShortPO>">


select的内容必须是XPath表达式
http://www.w3.org/TR/xslt#variables

具体产生式都能是什么形式有点儿乱,没看出来可以产生完整XML文档内容,你看看有没……
[/Quote]
fyswords 2011-09-15
  • 打赏
  • 举报
回复
<xsl:param name="ShortPO2" select="'../ShortPO.xml'"/>

这里面被单引号包着的不就是字符串吗?
fyswords 2011-09-15
  • 打赏
  • 举报
回复
你的意思是顶楼的问题被你自己在1楼已经回答了,现在的问题是3楼的吗?

param的select属性只要是XPath表达式都可以,你说的XML字符串是指什么?
http://www.w3cschool.cn/el_param.html
Element 2011-09-14
  • 打赏
  • 举报
回复
帖子都沉了,还是没有人来看过啊!
Element 2011-09-06
  • 打赏
  • 举报
回复
不是,这里只是一个输出时候的特殊字符的处理方式。
disable-output-escaping="yes" 如果为yes,特殊字符"<"就不做处理,直接输出。
如果为"no" 那么就会被转义为"<".

[Quote=引用 2 楼 fyswords 的回复:]

没用过Saxon,是说不用数据库查询时候Saxon的输出都是正确的么?用XMLSpy也这样么?
[/Quote]

-----------------------------------------------
我现在的问题是,请看3#吧。
Element 2011-09-06
  • 打赏
  • 举报
回复
 
<!-- 这里加载的本地文件 -->
<xsl:param name="ShortPO2" select="'../ShortPO.xml'"/>

1.这里的select属性是根据URI查找文件XML
====================??????????===============
那么可不可以直接加载一个XML字符串呢? 还有知道有什么方法的,给个建议啊,大侠们!
fyswords 2011-09-02
  • 打赏
  • 举报
回复
没用过Saxon,是说不用数据库查询时候Saxon的输出都是正确的么?用XMLSpy也这样么?
Element 2011-09-01
  • 打赏
  • 举报
回复

<xsl:template match="/">
<!-- 输出参数的值 -->
<xsl:value-of select="$ShortPO2" disable-output-escaping="yes"/>
</xsl:template>
oXygen XML Editor是一个多平台的XML编辑器(里诺下载站提供),XSLT / XQuery的调试器和分析器具有完整的Unicode支持。它提供了一个强大的代码洞察力,可以遵循DTD,RELAX NG或者XML架构,甚至可以从部分编辑过的文档学习的结构。XML和XSL文档可以容易地相关联的一个与另一个和变换结果可以被看作是文本或HTML。oXygen XML Editor提供了W3C XML模式的可视化模式编辑器和RELAX NG模式旨在简化架构文件的开发和理解。oXygen验证XML,XSL和XQuery,FO,XSD,RNG,RNC,NRL,DTD的Schematron,WSDL和CSS内容,报告与描述和行号信息错误,以及将它们标记在文档中时,验证您键入时启用。更多的文件可以被逻辑地组织在项目中。它配备了最新的Docbook DTD和样式表。   包括Apache的FO处理,能够生成PDF和PostScript。其他FO处理可以配置为插件。oXygen在调试模式进入,以显示来源和侧样式表文件侧,也显示效果和特殊的调试视图时提供了一个特殊的布局。调试和分析可以使用的Xalan,Xalan, Saxon 6 or Saxon 8转化引擎的最新版本来完成。动态呈现的输出,因为它是由变换过程完全与映射源和样式表产生的。一个完整的diff和合并的解决方案也提供oXygen。它提供了目录和文件比较,6档差异算法。oXygen通过包括Subversion客户端,使内容创作者之间更容易文档共享。svn客户端,您可以浏览库,检查变化,提交改变,更新你的工作副本并检查修订历史。oXygen支持导入数据库内容,微软Excel表和传统的文本数据文件到XML文档,也为从数据库表生成XML Schema的支持。

8,906

社区成员

发帖
与我相关
我的任务
社区描述
XML/XSL相关问题讨论专区
社区管理员
  • XML/XSL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧