<?xml version="1.0" encoding="UTF-8"?>
<TABLE NAME="less.db">
<DATA RECORDS="233673">
<RECORD ID="1">
<ID>1</ID>
<ROW>0</ROW>
<DATE>19/9/2003 12:31:54 μμ</DATE>
<al>29/6/2005 10:46:42 πμ</al>
<KIT>46123</KIT>
<KAP>08</KAP>
<YTE>A.IV.C.54</YTE>
<HTE>0</HTE>
<HEN>0</HEN>
<SUM>0</SUM>
<LYW>0</LYW>
<AMF>29</AMF>
<MANUFACTURER>ASUS</MANUFACTURER>
<AME>pan</AME>
</RECORD>
<RECORD ID="1">
<ID>1</ID>
<ROW>0</ROW>
<DATE>19/9/2003 12:31:54 μμ</DATE>
<al>29/6/2005 10:46:42 πμ</al>
<KIT>46123</KIT>
<KAP>08</KAP>
<YTE>A.IV.C.54</YTE>
<HTE>0</HTE>
<HEN>0</HEN>
<SUM>0</SUM>
<LYW>0</LYW>
<AMF>29</AMF>
<MANUFACTURER>asus</MANUFACTURER>
<AME>pan</AME>
</RECORD>
<RECORD ID="14">
<ID>1</ID>
<ROW>0</ROW>
<DATE>19/9/2003 12:31:54 μμ</DATE>
<al>29/6/2005 10:46:42 πμ</al>
<KIT>46123</KIT>
<KAP>08</KAP>
<YTE>A.IV.C.54</YTE>
<HTE>0</HTE>
<HEN>0</HEN>
<SUM>0</SUM>
<LYW>0</LYW>
<AMF>29</AMF>
<MANUFACTURER>Creative Labs</MANUFACTURER>
<AME>pan</AME>
</RECORD>
<RECORD ID="1">
<ID>1</ID>
<ROW>0</ROW>
<DATE>19/9/2003 12:31:54 μμ</DATE>
<al>29/6/2005 10:46:42 πμ</al>
<KIT>46123</KIT>
<KAP>08</KAP>
<YTE>A.IV.C.54</YTE>
<HTE>0</HTE>
<HEN>0</HEN>
<SUM>0</SUM>
<LYW>0</LYW>
<AMF>29</AMF>
<MANUFACTURER>Creative</MANUFACTURER>
<AME>pan</AME>
</RECORD>
<RECORD ID="14">
<ID>1</ID>
<ROW>0</ROW>
<DATE>19/9/2003 12:31:54 μμ</DATE>
<al>29/6/2005 10:46:42 πμ</al>
<KIT>46123</KIT>
<KAP>08</KAP>
<YTE>A.IV.C.54</YTE>
<HTE>0</HTE>
<HEN>0</HEN>
<SUM>0</SUM>
<LYW>0</LYW>
<AMF>29</AMF>
<MANUFACTURER>This is a test. Replace (all)</MANUFACTURER>
<AME>pan</AME>
</RECORD>
</DATA>
</TABLE>
search.txt:recherche xml et remplacer les erreurs xsl
ASUS
creative
This is a test. Replace (all)
replace.txt
GIGABYTE
LOGITECH
REPLACEMENT
et xsl:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:functx="http://www.functx.com"
exclude-result-prefixes="xs functx"
version="2.0">
<xsl:param name="search-file" as="xs:string" select="'search.txt'"/>
<xsl:param name="replacement-file" as="xs:string" select="'replace.txt'"/>
<xsl:param name="search-terms" as="xs:string*" select="tokenize(unparsed-text($search-file), '\r?\n')"/>
<xsl:param name="search-terms-is" as="xs:string*" select="for $term in $search-terms return lower-case(functx:escape-for-regex($term))"/>
<xsl:param name="replace-terms" as="xs:string*" select="tokenize(unparsed-text($replacement-file), '\r?\n')"/>
<xsl:include href="http://www.xsltfunctions.com/xsl/functx-1.0-nodoc-2007-01.xsl"/>
<xsl:function name="functx:replace-multi" as="xs:string?"
xmlns:functx="http://www.functx.com">
<xsl:param name="arg" as="xs:string?"/>
<xsl:param name="changeFrom" as="xs:string*"/>
<xsl:param name="changeTo" as="xs:string*"/>
<xsl:param name="flags" as="xs:string"/>
<xsl:sequence select="
if (count($changeFrom) > 0)
then functx:replace-multi(
replace($arg, $changeFrom[1],
functx:if-absent($changeTo[1],''), $flags),
$changeFrom[position() > 1],
$changeTo[position() > 1])
else $arg
"/>
</xsl:function>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="MANUFACTURER[some $search-term in $search-terms-is satisfies matches(current(), $search-term, 'i')]">
<xsl:copy>
<xsl:variable name="matched-terms" as="xs:string*" select="$search-terms-is[matches(current(), ., 'i')]"/>
<xsl:variable name="replacements" as="xs:string*" select="for $t in $matched-terms return $replace-terms[position() = index-of($search-terms-is, $t)]"/>
<xsl:value-of
select="functx:replace-multi(., $matched-terms, $replacements, 'i')"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
donne en sortie, ce qui suit :
<?xml version="1.0" encoding="UTF-8"?>
<TABLE NAME="less.db">
<DATA RECORDS="233673">
<RECORD ID="1">
<ID>1</ID>
<ROW>0</ROW>
<DATE>19/9/2003 12:31:54 μμ</DATE>
<al>29/6/2005 10:46:42 πμ</al>
<KIT>46123</KIT>
<KAP>08</KAP>
<YTE>A.IV.C.54</YTE>
<HTE>0</HTE>
<HEN>0</HEN>
<SUM>0</SUM>
<LYW>0</LYW>
<AMF>29</AMF>
<MANUFACTURER>GIGABYTE</MANUFACTURER>
<AME>pan</AME>
</RECORD>
<RECORD ID="1">
<ID>1</ID>
<ROW>0</ROW>
<DATE>19/9/2003 12:31:54 μμ</DATE>
<al>29/6/2005 10:46:42 πμ</al>
<KIT>46123</KIT>
<KAP>08</KAP>
<YTE>A.IV.C.54</YTE>
<HTE>0</HTE>
<HEN>0</HEN>
<SUM>0</SUM>
<LYW>0</LYW>
<AMF>29</AMF>
<MANUFACTURER>GIGABYTE</MANUFACTURER>
<AME>pan</AME>
</RECORD>
<RECORD ID="14">
<ID>1</ID>
<ROW>0</ROW>
<DATE>19/9/2003 12:31:54 μμ</DATE>
<al>29/6/2005 10:46:42 πμ</al>
<KIT>46123</KIT>
<KAP>08</KAP>
<YTE>A.IV.C.54</YTE>
<HTE>0</HTE>
<HEN>0</HEN>
<SUM>0</SUM>
<LYW>0</LYW>
<AMF>29</AMF>
<MANUFACTURER>LOGITECH Labs</MANUFACTURER>
<AME>pan</AME>
</RECORD>
<RECORD ID="1">
<ID>1</ID>
<ROW>0</ROW>
<DATE>19/9/2003 12:31:54 μμ</DATE>
<al>29/6/2005 10:46:42 πμ</al>
<KIT>46123</KIT>
<KAP>08</KAP>
<YTE>A.IV.C.54</YTE>
<HTE>0</HTE>
<HEN>0</HEN>
<SUM>0</SUM>
<LYW>0</LYW>
<AMF>29</AMF>
<MANUFACTURER>LOGITECH</MANUFACTURER>
<AME>pan</AME>
</RECORD>
<RECORD ID="14">
<ID>1</ID>
<ROW>0</ROW>
<DATE>19/9/2003 12:31:54 μμ</DATE>
<al>29/6/2005 10:46:42 πμ</al>
<KIT>46123</KIT>
<KAP>08</KAP>
<YTE>A.IV.C.54</YTE>
<HTE>0</HTE>
<HEN>0</HEN>
<SUM>0</SUM>
<LYW>0</LYW>
<AMF>29</AMF>
<MANUFACTURER>REPLACEMENT</MANUFACTURER>
<AME>pan</AME>
</RECORD>
</DATA>
</TABLE>
Comment devrait être fait le xsl utilisé, de manière à avoir une recherche et un remplacement exacts? par exemple, LOGITECH Labs est un remplacement indésirable. Nous voulions remplacer uniquement chaque élément qui a exactement le mot créatif (remplacement insensible à la casse), et non ce mot, où qu'il se trouve dans l'élément MANUFACTURER
N'attendez pas de nous pour télécharger et ouvrir les fichiers zip, essayez d'identifier les données qui causent le problème, puis montrer l'échantillon correspondant extrait dans votre question. Je soupçonne que vous avez des éléments contenant plusieurs termes de recherche, vous devrez expliquer ce que vous voulez faire dans ce cas, si vous aurez besoin de tous les remplacer. –
je n'étais pas capable d'identifier les données qui causent le problème ... la réponse est oui, les remplacer tous, s'il y a des éléments contenant plusieurs termes de recherche –