关于XSLT生成XSLT时,XSLT的NAMESPACE的问题。

Lostinet 2002-09-08 03:23:53
因为现在要对两个(或两个以上)的XML进行组合转换。
我的初想是通过转换第一个XML,生成相关的XSLT,用来对第二个XML进行转换。
以达到组合两个XML的目的。

现在问题在,
在原始的XSLT xmlns:xslt1设计中,中间会插入要准备生成的XSLT xmlns:xslt2的接点。
因为NAMESPACE一样,所以XSLT转换时会把xmlns:xslt2当做是转换指令。
这个问题该怎样解决才好呢?

可惜下面的方法不行,因为xmlns:x是只读的。
var xd=new ActiveXObject("MSXML2.DOMDocument.4.0");
xd.loadXML('<xml xmlns:x="http://x/"/>');
xd.documentElement.setAttribute("xmlns:x","http://newx");

当然可以把xd.xml取出来,把'xmlns:x="http://x/"/>'换掉。
不过这不是正规的方法。。


...全文
263 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lostinet 2002-09-08
  • 打赏
  • 举报
回复
wsdl也是这样组合namespace的。。。。
我觉得prefix和一个值同时用上namespace的话,
那么xsd就不容易检查值的合法性了。
saucer 2002-09-08
  • 打赏
  • 举报
回复
prefix is not important, as long as you bind the prefix to the right namespace, for example, this works:

xml:
<asp:root xmlns:asp="urn:whateverhere">hello</asp:root>

xsl:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:z="urn:whateverhere"
version="1.0">
<xsl:template match="z:root">
<xsl:value-of select="." />
</xsl:template>
</xsl:stylesheet>
Lostinet 2002-09-08
  • 打赏
  • 举报
回复
对。。这是xslt解决namespace冲突的方案了。
顺便问问,
怎样设置xpath的namespace的prefix?

例如
<x:template match="rs:data">
<x:apply-templates select="z:row">对Recordset生成的row进行循环。
某一天MS把rs,z所代表的namespace的prefix改掉了那么怎么办?
saucer 2002-09-08
  • 打赏
  • 举报
回复
inside your first XSLT, use xsl:namespace-alias, for example
<xsl:namespace-alias stylesheet-prefix="xslAlt" result-prefix="xsl"/>

see
http://www.xml.com/pub/a/2001/04/04/trxml/index.html

an example from the above article:

xml:
<ssheet>

<elementHandler element="para">
<p><elementContents/></p>
</elementHandler>

</ssheet>

xsl:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xslAlt="http://www.snee.com/xml/dummy"
version="1.0">

<xsl:namespace-alias stylesheet-prefix="xslAlt"
result-prefix="xsl"/>

<xsl:template match="elementHandler">
<xslAlt:template match="{@element}">
<xsl:apply-templates/>
</xslAlt:template>
</xsl:template>

<xsl:template match="elementContents">
<xslAlt:apply-templates/>
</xsl:template>

<xsl:template match="ssheet">
<xslAlt:stylesheet version="1.0">
<xsl:apply-templates/>
</xslAlt:stylesheet>
</xsl:template>

<!-- Just copy any other elements, attributes, etc. -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>

</xsl:stylesheet>

8,906

社区成员

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

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