交叉引用和扩充XSLT中的XML元素问题我对XML有一个新手,并且遇到了一个问题,那就是我生成了一个XML文档,该文档已经为其生成了一些属性列表元素不完整。我试图实现一个XSLT样式表,它与一个主文档(为所有属性默认值完成)交叉引用它,以便使用默认值填充任何缺失的属性。使用document()
例如,采取以下不完整的XML文档:
<?xml version="1.0" encoding="utf-8"?>
<foo>
<bar label="two" index="2"/>
</foo>
酒吧元件具有缺少的属性“类型”,我想根据该值与从以下主文档的默认值来填充'标签' 的:
<?xml version="1.0" encoding="utf-8"?>
<foo>
<bar label="one" index="1" type="type1"/>
<bar label="two" index="2" type="type2"/>
<bar label="three" index="3" type="type3"/>
</foo>
期望的结果将是:
<?xml version="1.0" encoding="utf-8"?>
<foo>
<bar label="two" index="2" type="type2"/>
</foo>
我的XSLT样式表,试图做到这一点使用的组合“文件()”和XPath如下:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="master" select="document('master.xml')"/>
<!-- Template matching 'root' of XML document -->
<xsl:template match="/">
<xsl:apply-templates select="foo"/>
</xsl:template>
<!-- Template for generating 'foo' element -->
<xsl:template match="foo">
<foo>
<xsl:apply-templates select="bar"/>
</foo>
</xsl:template>
<!-- Template for generating 'bar' element -->
<xsl:template match="bar">
<bar label="{@label}" index="{@index}" type="{$master/foo/bar[@[email protected]][1]/@type}"/>
</xsl:template>
</xsl:stylesheet>
然而,这并不工作,给我默认的“类型”属性的用“酒吧”元素的“一个”标签',而不是“二”:
<?xml version="1.0" encoding="utf-8"?>
<foo>
<bar label="two" index="2" type="type1"/>
</foo>
一些调查显示,XPath的模式匹配所有的“酒吧”的元素,而不仅仅是正确的,但我不知道为什么。
我在做什么错,是否有更好的方法来做到这一点?
这似乎总是如此[@ label = @ label]。你想要[@ label = current()/ @ label]吗? – Pawel 2012-04-18 00:30:24