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
Xml 检查XSLT_Xml_Xslt - Fatal编程技术网

Xml 检查XSLT

Xml 检查XSLT,xml,xslt,Xml,Xslt,我想检查某些文本的出现情况。下面是我的XSLT: <?xml version="1.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:template match="/"> &

我想检查某些文本的出现情况。下面是我的XSLT:

<?xml version="1.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:template match="/">

<!-- Notify PANTONE - If YES -->
<xsl:if test="contains(xmlreport/PageInfo/PageAttribute/PageColor,'PANTONE')">
<PantonePage><note>Yes</note></PantonePage>
</xsl:if>

<!-- Notify PANTONE - If NO -->
<xsl:if test="not(contains(xmlreport/PageInfo/PageAttribute/PageColor,'PANTONE'))">
<PantonePage><note>No</note></PantonePage>
</xsl:if>

</xsl:template>
</xsl:stylesheet>

对
不
我的愿望输出应该是:

<pantone>Yes</pantone>

在原始XML中,PANTONE可能是PANTONE Red U,PANTONE Green U。当测试上述XSLT时,答案总是否定的

下面是我的XML:

<?xml version="1.0" encoding="UTF-8"?>
<xmlreport>
  <PageInfo>
    <PageAttribute>
      <PageNum>1</PageNum>
      <TrimSize>
        <H>220 mm</H>
        <W>150 mm</W>
      </TrimSize>
      <MediaSize>
        <H>225 mm</H>
        <W>160 mm</W>
      </MediaSize>
      <PageColor>PANTONE Red U</PageColor>
    </PageAttribute>
    <PageAttribute>
      <PageNum>2</PageNum>
      <TrimSize>
        <H>220 mm</H>
        <W>150 mm</W>
      </TrimSize>
      <MediaSize>
        <H>225 mm</H>
        <W>160 mm</W>
      </MediaSize>
      <PageColor>Black</PageColor>
    </PageAttribute>
    <PageAttribute>
      <PageNum>3</PageNum>
      <TrimSize>
        <H>220 mm</H>
        <W>150 mm</W>
      </TrimSize>
      <MediaSize>
        <H>225 mm</H>
        <W>160 mm</W>
      </MediaSize>
      <PageColor>Cyan Magenta Yellow Black</PageColor>
    </PageAttribute>
  <PageInfo>
<xmlreport>

1.
220毫米
150毫米
225毫米
160毫米
潘通红U
2.
220毫米
150毫米
225毫米
160毫米
黑色
3.
220毫米
150毫米
225毫米
160毫米
青-品红-黄-黑

页面属性将根据页面数量重复。

根据提供的示例xml编辑样式表

我改变了方法,现在更清楚地了解了业务规则,您希望在页面信息元素中包含多个页面属性。Michael的答案明确地解释了一个值,即如果任何页面是pantone并且完全正确的话,返回的值。以下方法的不同之处在于,is提供了一个结构,以确定哪些页面是Pantone,以防其他人无意中发现这些答案,并逐页寻找业务规则

<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:template match="/">
        <results>
            <xsl:apply-templates />
        </results>
    </xsl:template>
    <xsl:template match="xmlreport/PageInfo/PageAttribute">
        <Page>
            <PageNum><xsl:number/></PageNum>
            <Pantone>
                <xsl:choose>
                    <xsl:when test="contains(PageColor,'PANTONE')">Yes</xsl:when>
                    <xsl:otherwise>No</xsl:otherwise>
                </xsl:choose>
            </Pantone>
        </Page>
    </xsl:template>
</xsl:stylesheet>

对
不
对您提供的示例XML运行此操作会产生以下结果:

<results>
    <Page>
        <PageNum>1</PageNum>
        <Pantone>Yes</Pantone>
    </Page>
    <Page>
        <PageNum>2</PageNum>
        <Pantone>No</Pantone>
    </Page>
    <Page>
        <PageNum>3</PageNum>
        <Pantone>No</Pantone>
    </Page>
</results>

1.
对
2.
不
3.
不

尝试失败的原因是
contains()
是一个字符串函数,表达式:

contains(xmlreport/PageInfo/PageAttribute/PageColor,'PANTONE')"
仅测试集合的第一个节点的字符串值

请尝试:

<xsl:template match="/">
    <PantonePage>
        <note>
            <xsl:choose>
                <xsl:when test="xmlreport/PageInfo/PageAttribute[contains(PageColor, 'PANTONE')]">Yes</xsl:when>
                <xsl:otherwise>No</xsl:otherwise>
            </xsl:choose>
        </note>
    </PantonePage>
</xsl:template>

对
不
或者-如果您可以接受true/false而不是Yes/No的结果-只需:

<xsl:template match="/">
    <PantonePage>
        <note>
            <xsl:value-of select="boolean(xmlreport/PageInfo/PageAttribute[contains(PageColor, 'PANTONE')])"/>
        </note>
    </PantonePage>
</xsl:template>


您可以发布XML以获取相关的XPATH吗?它适用于我假设的源XML,因此可能有一个属性或我缺少的东西。Hi@JasonW我已经更新了我的XML。“页面属性将根据页面数重复。”很遗憾,您的示例没有反映这一点,因为这是问题的根源。
<xsl:template match="/">
    <PantonePage>
        <note>
            <xsl:value-of select="boolean(xmlreport/PageInfo/PageAttribute[contains(PageColor, 'PANTONE')])"/>
        </note>
    </PantonePage>
</xsl:template>