Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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
XSLT字段验证_Xslt - Fatal编程技术网

XSLT字段验证

XSLT字段验证,xslt,Xslt,我需要验证1..N结构中的字段内容,因此数据成对出现在RESULT_ID和RESULT_VALUE中 如果“你可以用一种方式来看待它: XSLT1.0 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:st

我需要验证1..N结构中的字段内容,因此数据成对出现在RESULT_ID和RESULT_VALUE中


如果“你可以用一种方式来看待它:

XSLT1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

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

<xsl:template match="D_RESULT_VALUE[../D_RESULT_ID='Result.Min_Limit' and contains(., '&lt;')] ">
    <xsl:copy/>
</xsl:template>

<xsl:template match="D_RESULT_VALUE[../D_RESULT_ID='Result.Max_Limit' and contains(../../D_RESULT[D_RESULT_ID='Result.Min_Limit']/D_RESULT_VALUE, '&lt;')] ">
    <xsl:copy>
        <xsl:value-of select="../../D_RESULT[D_RESULT_ID='Result.Min_Limit']/D_RESULT_VALUE"/>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>


演示:

问题很好,但要包括你的代码!祝你好运。当XML不在名称空间中时,为什么你的代码要使用前缀?它在名称空间中。我已经隐藏了它,因为我认为它与本文无关。样式表的第一个标记如下:你不应该更改整个问题-它可能会使已经给出的任何答案无效。这可能是错误的最好问一个新问题=(好的,我刚刚发布了一个新的解决方案。很抱歉搞砸了。希望你能在新的帖子上提供一些帮助。Tks。Michael,我确信这有助于解决我的问题,但是我不太清楚如何在已经存在的代码中包含这个解决方案。这些模板是否应该放在XML标记中,它是否应该替换标记?我确信这将对于您来说,这是一个非常基本的问题,对不起,这是一个太基本的问题。为了更好地理解模板和其他语言功能的使用,我会读更多的内容,但现在如果您能提供一个如何进行此更改的简要细节,我将非常感谢,因为这是我在生产环境中面临的一个问题。这是一个完整的样式et-不需要额外的代码。如果您当前的代码执行其他功能,请编辑您的问题并解释(请不要在注释中发布代码-没有人可以阅读).我已经改变了整个问题。希望你能再帮我一次。Tks迈克尔!@RafaVieira这个问题没有回答吗?有点晚了,但是…是的,已经回答了!
<?xml version="1.0" encoding="UTF-8"?>
<TEST>
  <RESULTS>
       <RESULT>
            <D_RESULT>
                 <D_RESULT_ID>Result.Derived</D_RESULT_ID>
                 <D_RESULT_VALUE>59W</D_RESULT_VALUE>
            </D_RESULT>
            <D_RESULT>
                 <D_RESULT_ID>Result.Min_Limit</D_RESULT_ID>
                 <D_RESULT_VALUE/>
            </D_RESULT>
            <D_RESULT>
                 <D_RESULT_ID>Result.Max_Limit</D_RESULT_ID>
                 <D_RESULT_VALUE>&lt;=600.0000</D_RESULT_VALUE>
            </D_RESULT>
            <D_RESULT>
                 <D_RESULT_ID>Result.FailedCriticalLvl</D_RESULT_ID>
                 <D_RESULT_VALUE>false</D_RESULT_VALUE>
            </D_RESULT>
       </RESULT>
  </RESULTS>
</TEST>
    <xsl:for-each select="a:D_RESULT">
        <D_RESULT>
            <D_RESULT_ID>
                <xsl:value-of select="a:D_RESULT_ID"/>
            </D_RESULT_ID>
            <D_RESULT_VALUE>
                <xsl:value-of select="a:D_RESULT_VALUE"/>
            </D_RESULT_VALUE>
        </D_RESULT>
    </xsl:for-each>
</RESULT>
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

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

<xsl:template match="D_RESULT_VALUE[../D_RESULT_ID='Result.Min_Limit' and contains(., '&lt;')] ">
    <xsl:copy/>
</xsl:template>

<xsl:template match="D_RESULT_VALUE[../D_RESULT_ID='Result.Max_Limit' and contains(../../D_RESULT[D_RESULT_ID='Result.Min_Limit']/D_RESULT_VALUE, '&lt;')] ">
    <xsl:copy>
        <xsl:value-of select="../../D_RESULT[D_RESULT_ID='Result.Min_Limit']/D_RESULT_VALUE"/>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>