【发布时间】:2011-01-08 00:27:08
【问题描述】:
我无法真正正确地表述它,最好举个例子。
XML:
<?xml version="1.0" encoding="UTF-8"?>
<foo>
<bar id="someId" class="someClass"/>
<buz class="someClass" id="someId"/>
<ololo class="someClass"/>
<test id="someId"/>
</foo>
XSLT:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*/*">
<xsl:value-of select="@id | @class"/><xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
结果:
someId
someClass
someClass
someId
我需要什么
我需要保持属性的“优先级”,如我的 xpath 表达式中所述。
因此,如果我们将@id | @class 称为具有两个操作数的表达式,我需要不按文档顺序获取属性,而是按照表达式中指定两个操作数的顺序。
所以,结果应该是:
someId
someId
someClass
someId
仅当@id 不存在时才应使用@class。
我知道,它可以用条件逻辑来完成,但我真的对一个简短的解决方案很感兴趣,因为它很常见并用作 属性值模板。
这可能很明显,我错过了优雅的人。
请注意,我说的是 XPath 1.0。
【问题讨论】:
-
好问题,+1。有关完整且非常简短的 XPath 1.0 单行代码,请参阅我的答案。 :)