嗨,朋友们,我需要这个问题,我的xml风格
<stringtable>
<section>
<string _enum="0x78B5CB94" _extra="0xFFFFFFFF" _id="856571" _value="Anladin.[Timing 0.43 0.00 1]" />
<string _enum="0xA980AB0A" _extra="0xFFFFFFFF" _id="856572" _value="De nada.[Timing 0.37 0.00 1]" />
<_name>0x25C84B25</_name>
</section>
<_language>english</_language>
</stringtable>如何转换此样式
<stringtable language='english'>
<section name='0x25C84B25'>
<string enum='0x78B5CB94' extra='0xFFFFFFFF' id='856571' value='Anladın.[Timing 0.43 0.00 1]'></string>
<string enum='0xA980AB0A' extra='0xFFFFFFFF' id='856572' value='De nada.[Timing 0.37 0.00 1]'></string>
</stringtable>
</section>发布于 2021-12-14 17:12:29
通过使用XSLT。
输入XML
<stringtable>
<section>
<string _enum="0x78B5CB94" _extra="0xFFFFFFFF" _id="856571" _value="Anladin.[Timing 0.43 0.00 1]"/>
<string _enum="0xA980AB0A" _extra="0xFFFFFFFF" _id="856572" _value="De nada.[Timing 0.37 0.00 1]"/>
<_name>0x25C84B25</_name>
</section>
<_language>english</_language>
</stringtable>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="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="stringtable">
<xsl:copy>
<xsl:attribute name="language">
<xsl:value-of select="_language"/>
</xsl:attribute>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="section">
<xsl:copy>
<xsl:attribute name="name">
<xsl:value-of select="_name"/>
</xsl:attribute>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="_name" />
<xsl:template match="_language" />
</xsl:stylesheet>输出
<stringtable language="english">
<section name="0x25C84B25">
<string _enum="0x78B5CB94" _extra="0xFFFFFFFF" _id="856571" _value="Anladin.[Timing 0.43 0.00 1]" />
<string _enum="0xA980AB0A" _extra="0xFFFFFFFF" _id="856572" _value="De nada.[Timing 0.37 0.00 1]" />
</section>
</stringtable>c# XSLT转换
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("File '{0}' has been generated.", OUTPUTXMLFILE);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}https://stackoverflow.com/questions/70352604
复制相似问题