А можно вот так (в порядке тренировки навыков работы с XSLT):
X++:
static void ResearchXSLT(Args _args)
{
#define.OldValue("value")
#define.NewValue("NewValue")
str fileName = "C:\\temp\\1.xml";
str xslt = strFmt('<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">'+
'<xsl:template match="*|@*|text()">'+
'<xsl:copy>'+
'<xsl:apply-templates select="*|@*|text()"/>'+
'</xsl:copy>'+
'</xsl:template>'+
'<xsl:template match="@atribut[.=\'%1\']">' +
'<xsl:attribute name="atribut">%2</xsl:attribute> '+
'</xsl:template>'+
'</xsl:stylesheet>',
#OldValue,
#NewValue);
str outXml = '';
System.Xml.XmlReader xslReader;
System.Xml.XmlReader xmlReader;
System.Xml.XmlTextWriter xmlWriter;
System.IO.StringReader stringReader;
System.IO.StringWriter stringWriter;
System.Xml.Xsl.XslCompiledTransform xslTransform;
System.IO.StreamWriter streamWriter;
;
new InteropPermission(InteropKind::ClrInterop).assert();
info(xslt);
stringReader = new System.IO.StringReader(xslt);
xslReader = System.Xml.XmlReader::Create(stringReader);
xmlReader = System.Xml.XmlReader::Create(fileName);
xslTransform = new System.Xml.Xsl.XslCompiledTransform();
xslTransform.Load(xslReader);
stringWriter = new System.IO.StringWriter();
xmlWriter = new System.Xml.XmlTextWriter(stringWriter);
xslTransform.Transform(xmlReader, xmlWriter);
xmlReader.Close();
xmlWriter.Close();
outXml = stringWriter.ToString();
streamWriter = new System.IO.StreamWriter(fileName);
streamWriter.Write(outXml);
streamWriter.Close();
CodeAccessPermission::revertAssert();
info(outXml);
}