首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用xslt基于属性迭代XML中的复杂元素

使用xslt基于属性迭代XML中的复杂元素
EN

Stack Overflow用户
提问于 2014-02-07 12:30:21
回答 2查看 656关注 0票数 0

我有一个XML数据,如下所示

输入XML

代码语言:javascript
复制
                <?xml version = "1.0" encoding = "UTF-8"?>
                <Root>
                    <Child ID = "1">
                        <condition>true</condition>
                        <code>Error-1</code>
                    </Child>
                    <Child ID = "2">
                        <condition>false</condition>
                        <code>Error-2</code>
                    </Child>
                    <Child ID = "3">
                        <condition>true</condition>
                        <code>Error-3</code>
                    </Child>
                    <Child ID = "4">
                        <condition>false</condition>
                        <code>Error-4</code>
                    </Child>
                    <Child ID = "5">
                        <condition>true</condition>
                        <code>Error-5</code>
                    </Child>
                    <Child ID = "6">
                        <condition>true</conditions>
                        <code>Error-6</code>
                    </Child>
                    <Child ID = "7">
                        <condition>false</condition>
                        <code>Error-7</code>
                    </Child>
                </Root>

我的要求是迭代所有子节点下的条件元素。

如果条件元素的值是true,那么我必须在代码元素中获取相关的值

预期产出:

代码语言:javascript
复制
<?xml version = "1.0" encoding = "UTF-8"?>
    <code>Error-1</code>
    <code>Error-3</code>
    <code>Error-5</code>
    <code>Error-6</code>

我一直试图基于子节点的属性ID来实现这一点。在迭代条件元素时,如何获得它的父节点(即子元素)的属性ID,并保留它以获取相关代码(如果条件元素的值为true )。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-11 10:39:04

您需要以下样式表:

代码语言:javascript
复制
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output method="xml" indent="yes" />

    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="Child">
        <xsl:if test="condition[.='true']">
            <xsl:apply-templates select="code"/>
        </xsl:if>
    </xsl:template>

</xsl:stylesheet>
票数 1
EN

Stack Overflow用户

发布于 2014-02-07 12:59:13

不知道您正在使用的XSLT的上下文,我可以说,您可以很容易地使用正确的XPath来完成这个任务。

代码语言:javascript
复制
Root/Child[condition='true']/code

只要使用正确的谓词,就可以根据需要调整上下文。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21627850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档