Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
循环使用XSL中的XML元素_Xml_Loops_Xslt - Fatal编程技术网

循环使用XSL中的XML元素

循环使用XSL中的XML元素,xml,loops,xslt,Xml,Loops,Xslt,我有这样的XML文件 <ViewFields> <FieldRef Name="Approval Status" /> <FieldRef Name="Requirement Status" /> <FieldRef Name="Development Status" /> <FieldRef Name="Testing Status" /> </ViewStatus> 我有以下XSL代码来获取FieldRef

我有这样的XML文件

<ViewFields> 
<FieldRef Name="Approval Status" /> 
<FieldRef Name="Requirement Status" /> 
<FieldRef Name="Development Status" /> 
<FieldRef Name="Testing Status" />
</ViewStatus>

我有以下XSL代码来获取FieldRef值

<xsl:template name="FieldRef_body.Status" match="FieldRef[@Name='ViewFields/FieldRef[1]/@Name']" mode="body">
        <xsl:param name="thisNode" select="."/>
            <xsl:choose>
                <xsl:when test="$thisNode/@*[name()=current()/@Name] = 'Completed'">
                    <img src="/_layouts/images/IMNON.png" alt="Status: {$thisNode/@Status}"/>
                </xsl:when>
                <xsl:when test="$thisNode/@*[name()=current()/@Name] = 'In Progress'">
                    <img src="/_layouts/images/IMNIDLE.png" alt="Status: {$thisNode/@Status}"/>
                </xsl:when>
                <xsl:otherwise>
                    <img src="/_layouts/images/IMNBUSY.png" alt="Status: {$thisNode/@Status}"/>
                </xsl:otherwise>
            </xsl:choose>
    </xsl:template>


我试图通过FieldRef*[x]*循环来一个接一个地获取值,它没有返回任何内容。我想通过循环将FieldRef值分配给@Name变量。

这很明显:

  • match=“FieldRef[@Name='ViewFields/FieldRef[1]/@Name']”
    。没有
    Name
    属性将字符串
    'ViewFields/FieldRef[1]/@Name'
    作为字符串值。您很可能希望在这里使用XPath表达式,而不是字符串。使用
    match=“FieldRef[@Name=ViewFields/FieldRef[1]/@Name]”

  • 提供的XML文档中没有字符串值为“已完成”或字符串值为“正在进行”的属性

  • 此外,XML文档中根本没有任何
    Status
    属性


  • 你的问题没有所有需要正确回答的上下文,但是你应该考虑将你的构造简化成循环的“每个”。

    给定xml

    <ViewFields> 
    <FieldRef Name="Approval Status" />
    <FieldRef Name="Requirement Status" /> 
    <FieldRef Name="Development Status" /> 
    <FieldRef Name="Testing Status" />
    </ViewFields>
    
    
    
    使用xsl

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template name="main" match="/">
        <xsl:for-each select="/ViewFields/FieldRef">
            <xsl:choose>
                <xsl:when test="@Name = 'Approval Status'">
                    <ApprovalStatus/>
                </xsl:when>
                <xsl:when test="@Name = 'Requirement Status'">
                    <RequirementStatus/>
                </xsl:when>
                <xsl:otherwise>
                    <SomethingElse/>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:for-each>
    </xsl:template>
    
    
    


    这可能有点接近你想要的。

    对我来说似乎很明显:看看我的答案。注意:从问题的定义来看,我仍然不知道您要解决什么任务——您必须提供真正的XML文档,最重要的是,提供确切的所需结果。嗨,Dimitre,请找到下面的链接。这正是我正在处理的场景。在本文中,它可以很好地处理单个状态列,如果列表有多个状态列,我想应用它。请仔细阅读上面的网址,你会明白的。感谢你的时间。@user547077:你为什么认为这篇博文会把事情说清楚?绝对不是。在我看来,您不知道确切的问题是什么,因为您无法描述它。Dimitre,我在下面的链接中发布了确切的输出要求,因为当前线程不接受格式化文本。Jonfen,谢谢你的回复,这里是我正在工作的场景。同样,我必须申请多个栏目。请访问此链接,谢谢