0

我有一个 xml 文件,其中包含多个具有相似子元素的相似元素。例如

<root>
    <elem>
        <condition>A</condition>
        <value>111</value>
    </elem>
    <elem>
       <condition>B</condition>
        <value>555</value>
    </elem>
    <elem>
        <condition>A</condition>
        <value>222</value>
    </elem>
</root>

其中一个元素包含我需要在 xsl 中提取的值。该值必须由元素子节点中的另一个元素中声明的条件来标识。假设条件是'B',我需要那个元素'555'的值。

我知道如何在我使用的 xml 编辑器 XPath 中获得正确的值(Rinzo - Eclipse)=>

/root/elem[condition='B']/value

但是当我尝试在 xsl => 中获得它时,我无法获得(任何)价值

<xsl:value-of select="/root/elem[condition='B']/value"/>

xsl 中的值将在单个元素中,因此不能使用 for-each 循环。恕我直言,原始 xml 格式不正确,但我对此无能为力。

所以问题是,如何使用 xsl:value-of 在 xsl 文件中获取该值?

4

1 回答 1

1

我们看不到您的 XML 或 XSL 的其余部分,但您的 value-of 语句可以正常工作。

<xsl:template match="/">
  <xsl:value-of select="/root/elem[condition='B']/value"/>
</xsl:template>

有效并返回:555

正如Flynn1179指出的那样,在评论中,您的 XML 可能包含一个默认名称空间,而 XPATH 中没有考虑到这一点。

尝试将命名空间添加到 XPATH 内联(将http://yournamespace-here.example.com替换为实际 URL):

/*[namespace-uri()='http://yournamespace-here.example.com' and local-name()='root']/*[namespace-uri()='http://yournamespace-here.example.com' and local-name()='elem'][condition='B']/*[namespace-uri()='http://yournamespace-here.example.com' and local-name()='value']

或者在你的 XSL 中给它一个前缀

xmlns:myPrefix="http://yournamespace-here.example.com" 

然后将其添加到您的 XPATH

/myPrefix:root/myPrefix:elem[condition='B']/myPrefix:value
于 2012-10-29T14:35:10.307 回答