Я видел несколько примеров различных способов проверить, существует ли значение (узел) в списке (повторяющаяся переменная XML), но по какой-то причине я не могу понять точный синтаксис оператора Xpath, который я должен использовать. У меня есть один XML-документ, который представляет собой список строк счетов, а другой документ XML - список неправильных строк. Если во втором документе существует значение в первом документе, мне нужно поставить/заменить его значением «X», в противном случае оставить пустым.XSLT-XPath: проверьте, существует ли значение в списке
Здесь входной образец документ
Input1
<?xml version="1.0" encoding="UTF-8"?>
<UPSOutboundFlatFileSchema>
<data>
<processFlag>1</processFlag>
<field1>...</field1>
<field2>...</field2>
</data>
<data>
<processFlag>2</processFlag>
<field1>...</field1>
<field2>...</field2>
</data>
<data>
<processFlag>3</processFlag>
<field1>...</field1>
<field2>...</field2>
</data>
<data>
<processFlag>4</processFlag>
<field1>...</field1>
<field2>...</field2>
</data>
</UPSOutboundFlatFileSchema>
Input2
<?xml version="1.0" encoding="UTF-8"?>
<rows>
<row>
<LineNumber>2</LineNumber>
</row>
<row>
<LineNumber>3</LineNumber>
</row>
</rows>
Выходной документ
<?xml version="1.0" encoding="UTF-8"?>
<UPSOutboundFlatFileSchema>
<data>
<processFlag></processFlag>
<field1>...</field1>
<field2>...</field2>
</data>
<data>
<processFlag>X</processFlag>
<field1>...</field1>
<field2>...</field2>
</data>
<data>
<processFlag>X</processFlag>
<field1>...</field1>
<field2>...</field2>
</data>
<data>
<processFlag></processFlag>
<field1>...</field1>
<field2>...</field2>
</data>
</UPSOutboundFlatFileSchema>
Вот XSLT У меня есть до сих пор, я просто не могу не получить XPath заявление на первом «когда тест =» правильный ...
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsl:output indent="yes"/>
<xsl:variable name="rejectLines" select="bpws:getVariableData('UPSDataRejectLineNumbers')"/>
<xsl:variable name="input" select="/"/>
<xsl:template match="/">
<xsl:element name="UPSOutboundFlatFileSchema">
<xsl:for-each select="$input/*:UPSOutboundFlatFileSchema/*:data">
<xsl:element name="data">
<xsl:choose>
<xsl:when test="boolean($rejectLines/*:rows/*:row/*:LineNumber = processFlag">
<xsl:element name="processFlag">
<xsl:value-of select="X"/>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:element name="processFlag">
<xsl:value-of select="''"/>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
<xsl:copy-of select="child::*[not(self::processFlag)]"/>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Ну, это имеет смысл ... Я определенно переусердствовал (и имел право Xpath для начала). Урок узнал наверняка, еще раз спасибо за помощь Кен! – rwolters3