交叉引用和擴充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