Как повысить значения в каждой строке 2
<?xml version="1.0" encoding="windows-1251" ?>
<Сотрудник Нпп="1">
<Фамилия>***</Фамилия>
<Имя>***</Имя>
<Отчество>***</Отчество>
</Сотрудник>
<Сотрудник Нпп="2">
<Фамилия>***</Фамилия>
<Имя>***</Имя>
<Отчество>***</Отчество>
</Сотрудник>
<Сотрудник Нпп="3">
<Фамилия>***</Фамилия>
<Имя>***</Имя>
<Отчество>***</Отчество>
Добрый вечер! Нужно повысить Нпп на 2000 в каждой строке. Можете помочь?
Ответы (1 шт):
Автор решения: Yitzhak Khabinsky
→ Ссылка
Я сделал ваш XML правильно сформированным, добавив корневой элемент.
XSLT использует так называемый шаблон преобразования идентичности (Identity transform pattern).
XML
<?xml version="1.0" encoding="windows-1251"?>
<root>
<Сотрудник Нпп="1">
<Фамилия>***</Фамилия>
<Имя>***</Имя>
<Отчество>***</Отчество>
</Сотрудник>
<Сотрудник Нпп="2">
<Фамилия>***</Фамилия>
<Имя>***</Имя>
<Отчество>***</Отчество>
</Сотрудник>
<Сотрудник Нпп="3">
<Фамилия>***</Фамилия>
<Имя>***</Имя>
<Отчество>***</Отчество>
</Сотрудник>
</root>
XSLT
<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="utf-8" indent="yes" omit-xml-declaration="no"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Сотрудник">
<Сотрудник Нпп="{./@Нпп + 2000}">
<xsl:apply-templates/>
</Сотрудник>
</xsl:template>
</xsl:stylesheet>
c#
void Main()
{
const string SOURCEXMLFILE = @"e:\temp\input.xml";
const string XSLTFILE = @"e:\Temp\Process.xslt";
const string OUTPUTXMLFILE = @"e:\temp\output.xml";
try
{
XsltArgumentList xslArg = new XsltArgumentList();
using (XmlReader src = XmlReader.Create(SOURCEXMLFILE))
{
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load(XSLTFILE, new XsltSettings(true, true), new XmlUrlResolver());
XmlWriterSettings settings = xslt.OutputSettings.Clone();
settings.IndentChars = "\t";
// to remove BOM
settings.Encoding = new UTF8Encoding(false);
using (XmlWriter result = XmlWriter.Create(OUTPUTXMLFILE, settings))
{
xslt.Transform(src, xslArg, result, new XmlUrlResolver());
result.Close();
}
}
Console.WriteLine("Файл '{0}' создан.", OUTPUTXMLFILE);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
Результат
<?xml version="1.0" encoding="utf-8"?>
<root>
<Сотрудник Нпп="2001">
<Фамилия>***</Фамилия>
<Имя>***</Имя>
<Отчество>***</Отчество>
</Сотрудник>
<Сотрудник Нпп="2002">
<Фамилия>***</Фамилия>
<Имя>***</Имя>
<Отчество>***</Отчество>
</Сотрудник>
<Сотрудник Нпп="2003">
<Фамилия>***</Фамилия>
<Имя>***</Имя>
<Отчество>***</Отчество>
</Сотрудник>
</root>