J'ai un problème lorsque j'essaie de mettre à jour un ensemble d'attributs avec une valeur fixe contenue dans une section récurrente d'un document XML à l'aide du Microsoft.BizTalk.Streaming.ValueMutator
.Mettre à jour l'attribut XML dans une section récurrente à l'aide de Microsoft.BizTalk.Streaming.ValueMutator
Par exemple, le document XML que je tente de mettre à jour contient l'entrée suivante:
<ns0:TestXML xmlns:ns0="http://Test.Schemas">
<ns0:NodeA>
<ns0:NodeB>
<ns0:alpha Id="1" Value="Apple" Type=""></ns0:alpha>
<ns0:alpha Id="2" Value="Banana" Type=""></ns0:alpha>
<ns0:alpha Id="3" Value="Car" Type=""></ns0:alpha>
<ns0:alpha Id="4" Value="Duck" Type=""></ns0:alpha>
</ns0:NodeB>
</ns0:NodeA>
</ns0:TestXML>
Le code que je tente d'utiliser pour mettre à jour le document XML est:
XmlDocument xDocInput = new XmlDocument();
XmlDocument xDocOutput = new XmlDocument();
string inputFileName = @"C:\Input.xml";
string outputFileName = @"C:\Output.xml";
string newValue = "fruit";
string xpathToUpdate = "/*[namespace-uri()='http://Test.Schemas']/*[local-name()='NodeA']/*[local-name()='NodeB']/*[@Type]";
xDocInput.Load(inputFileName);
using (MemoryStream memstream = new MemoryStream())
{
xDocInput.Save(memstream);
memstream.Position = 0;
XPathCollection queries = new XPathCollection();
queries.Add(new XPathExpression(xpathToUpdate));
//ValueMutator xpathMatcher = new ValueMutator(this.XPathCallBack);
//Get resulting stream into response xml
xDocOutput.Load(new XPathMutatorStream(memstream, queries, delegate(int matchIdx, XPathExpression expr, string origValue, ref string finalValue) { finalValue = newValue; }));
//System.Diagnostics.Trace.WriteLine("Trace: " + memstream.Length.ToString());
}
xDocOutput.Save(outputFileName);
Le Le résultat de ce code est le fichier "Output.xml". Figurant dans le document de sortie « Output.xml » est la sortie suivante:
<ns0:TestXML xmlns:ns0="http://Test.Schemas" >
<ns0:NodeA>
<ns0:NodeB>
<ns0:alpha Id="1" Value="Apple" Type="" >fruit</ns0:alpha>
<ns0:alpha Id="2" Value="Banana" Type="" >fruit</ns0:alpha>
<ns0:alpha Id="3" Value="Child" Type="" >fruit</ns0:alpha>
<ns0:alpha Id="4" Value="Duck" Type="" >fruit</ns0:alpha>
</ns0:NodeB>
</ns0:NodeA>
</ns0:TestXML>
Comme vous remarquerez la valeur du texte de l'élément « alpha » est mis à jour correctement. Le résultat souhaité est de mettre à jour tous les attributs nommés "Type" avec la valeur "Fruit". Qu'est-ce qui ne va pas et comment ce problème est-il résolu?
Nice. Je n'avais pas réalisé que c'était quelque chose de si élémentaire. Merci de préserver ma santé mentale. – chinna