弄乱字符

时间:2013-04-03 09:24:59

标签: c# .net xml xslt encoding

我的目标是将原始xml文件通过某些xsl转换为具有utf-8编码的目标。这是带有以下标题的原始xml文件:

 <?xml version='1.0' encoding='ISO-8859-1'?>

我正在使用xsl将其转换为另一个xml文件。 xsl文件具有以下标头:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns="http://www.w3.org/1999/xhtml" 
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                version="1.0" 
                xmlns:xalan="http://xml.apache.org/xalan" 
                exclude-result-prefixes="xalan">
<xsl:output method="xml" 
            encoding="UTF-8" 
            indent="yes" 
            xalan:indent-amount="4"/>

这是C#代码:

  XPathDocument myXPathDoc = new XPathDocument(FileName);
  XslCompiledTransform myXslTrans = new XslCompiledTransform();
  myXslTrans.Load("C:/test/test.xsl");
  XmlTextWriter myWriter = new XmlTextWriter(destinationFile, Encoding.UTF8);
  myWriter.Formatting = Formatting.Indented;
  myWriter.Indentation = 4;

   myXslTrans.Transform(myXPathDoc, null, myWriter);
   myWriter.Close();

这个输出是我在destinationfile上得到一个乱码的阿拉伯语文本。如何让这个阅读正确的阿拉伯语文本。

编辑,问题2:

原始XML文件缺少关闭的根/子标记。如何编辑此xml以包含这些内容。

e.g。原始的xml文件,缺少aaaa和nnnn的结束。如何使用C#进行编辑以使其进入。

<aaaa>
<nnnn)
<rrrr>
</rrrr>

1 个答案:

答案 0 :(得分:2)

如果您的原始XML文件包含阿拉伯字符,那么其XML声明就在说谎 - 该文件不是encoding="ISO-8859-1",因为该编码不能代表阿拉伯语。

如果您可以确定原始文件真正使用的编码,则可以使用XPathDocument构造函数强制使用TextReader代替该编码来读取文件采取文件名的那个。对于阿拉伯语,编码可能是Windows-1256。