У меня есть xml с несколькими узлами, и я пытаюсь извлечь узлы на основе условия 'и', используя xpath 1.0. Я попытался использовать содержимое в предложении for-each, когда я использую только один [contains (DateType, 'CAOSL')], он возвращает результат, но когда я добавляю предложение 'and', результат не возвращается, даже если существует 2 узла. которые соответствуют условию. Я был бы признателен, если кто-то может указать, что не так или указать мне правильный способ сделать это.
Заранее спасибо.
Я пробовал for-each, как показано ниже в файле xslt,Первый возвращает узел с соответствующим CAOSL, но условие и не выполняется.
XML:
<Products>
<Product>
<ProductSupply>
<SupplyDetail>
<Supplier>
<SupplierRole>01</SupplierRole>
<SuppierName>Test</SuppierName>
</Supplier>
<ProductAvailability>21</ProductAvailability>
<SupplyDate>
<SupplyDateRole>00</SupplyDateRole>
<Date>1464739200</Date>
<DateCountry>NZ</DateCountry>
<DateType>NZPUB</DateType>
</SupplyDate>
<SupplyDate>
<SupplyDateRole>00</SupplyDateRole>
<Date>1464739200</Date>
<DateCountry>AU</DateCountry>
<DateType>AUPUB</DateType>
</SupplyDate>
<SupplyDate>
<SupplyDateRole>00</SupplyDateRole>
<Date>1496102400</Date>
<DateCountry>CA</DateCountry>
<DateType>CAOSL</DateType>
</SupplyDate>
<SupplyDate>
<SupplyDateRole>00</SupplyDateRole>
<Date>1480550400</Date>
<DateCountry>UK</DateCountry>
<DateType>UKOSL</DateType>
</SupplyDate>
<SupplyDate>
<SupplyDateRole>00</SupplyDateRole>
<Date>1464739200</Date>
<DateCountry>NZ</DateCountry>
<DateType>NZSHD</DateType>
</SupplyDate>
<SupplyDate>
<SupplyDateRole>02</SupplyDateRole>
<Date>1463961600</Date>
<DateCountry>AU</DateCountry>
<DateType>AUOSL</DateType>
</SupplyDate>
<SupplyDate>
<SupplyDateRole>00</SupplyDateRole>
<Date>1464566400</Date>
<DateCountry>NZ</DateCountry>
<DateType>NZOSL</DateType>
</SupplyDate>
<SupplyDate>
<SupplyDateRole>08</SupplyDateRole>
<Date>1464739200</Date>
<DateCountry>AU</DateCountry>
<DateType>AUSHD</DateType>
</SupplyDate>
<SupplyDate>
<SupplyDateRole>00</SupplyDateRole>
<Date>1496102400</Date>
<DateCountry>US</DateCountry>
<DateType>USOSL</DateType>
</SupplyDate>
</SupplyDetail>
</ProductSupply>
</Product>
XSLT:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes" />
<xsl:template match="Products">
<Products>
<xsl:apply-templates select="Product" />
</Products>
</xsl:template>
<xsl:template match="Product">
<product>
<productsupply>
<supplydetail>
<xsl:for-each select="ProductSupply/SupplyDetail/SupplyDate[contains(DateType, 'CAOSL') and contains(DateType, 'USOSL')]">
<supplydate>
<DateType>
<xsl:value-of select="DateType" />
</DateType>
<DateCountry>
<xsl:value-of select="DateCountry" />
</DateCountry>
</supplydate>
</xsl:for-each>
</supplydetail>
</productsupply>
</product>
</xsl:template>
</xsl:stylesheet>
Вывод:
<result>
<SupplyDate>
<SupplyDateRole>00</SupplyDateRole>
<Date>1496102400</Date>
<DateCountry>CA</DateCountry>
<DateType>CAOSL</DateType>
</SupplyDate>
<SupplyDate>
<SupplyDateRole>00</SupplyDateRole>
<Date>1496102400</Date>
<DateCountry>US</DateCountry>
<DateType>USOSL</DateType>
</SupplyDate>