8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

如何让XMLDocument不在自封闭标签上留空格?

Football Dudes 2月前

43 0

我有一个格式良好且没有任何空格的 XML。它一定是这样的。当我将其加载到 XMLDocument 进行签名时,自闭合标签会多出一个空格,并且变成:...

我有一个格式良好且没有任何空格的 XML。它必须是那样的。

当我将其加载到 XMLDocument 进行签名时,自闭合标签会出现一个额外的空格,并且

    <cEAN/>

变成:

     <cEAN />

一旦这份文件必须签署,就不可能删除空白。

属性 PreserveWhiteSpace 对结果没有任何影响。

我怎样才能改变这种行为?

帖子版权声明 1、本帖标题:如何让XMLDocument不在自封闭标签上留空格?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Football Dudes在本站《linq》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 在结尾的 \'/\' 之前没有空格,这是 XmlDocument . XmlDocument 由节点组成的数据结构。它是二进制的。它不是文本。

    您看到的任何额外空间仅当您将文档序列化为文本时才存在。

    您在签名时是否真的遇到了问题,或者您只是认为自己遇到这样的问题?

  • Rafi 2月前 0 只看Ta
    引用 3

    @spender:我知道这很难(好吧,不可能),但我们必须尝试,否则,我们将回到没有标准的境地。我还记得那些日子。当时软件工程师的市场规模要小得多,缺乏标准化是主要原因之一。

  • 我以前遇到过这个问题。XML 由基本哈希签名,因此序列化时不会更改。我通过编写序列化程序解决了这个问题,这样我就可以确保它会输出正确的 XML。

    读取 XML XMLReader ,并写出每一块。

  • 我的解决方法如下:

    1. 创建流:
    
        var stream = new MemoryStream();
    
    
    1. 创建 XML 并将其保存到流中:
    
               var writerSettings = new XmlWriterSettings
                {
                    Indent = true,
                    IndentChars = "    ",
                    NewLineChars = Environment.NewLine,
                    NewLineHandling = NewLineHandling.Replace,
                    OmitXmlDeclaration = true,
                };
    
                using (var xrmService = new XrmServiceContext(context.Service))
                using (XmlWriter writer = XmlWriter.Create(stream, writerSettings))
                {
                    writer.WriteStartElement("xyz");
                    writer.WriteElementString("abc", "123");
                    ...
                    writer.WriteEndElement();
                    writer.Flush();
                }
    
    
    1. 将流转换为字符串以便能够重新格式化
    
        string stringXml = Encoding.UTF8.GetString(stream.ToArray()).Replace(" />", "/>");
    
    
    1. p1

       byte[] byteArray = Encoding.UTF8.GetBytes(stringXml);       MemoryStream formattedStream = new MemoryStream(byteArray);
    2. p2

    
        using (FileStream file = new FileStream(@"filepath\file.xml", 
                   FileMode.Create, FileAccess.Write))
                    {
                        formattedStream.CopyTo(file);
                        file.Flush();
                    }
                    formattedStream.Flush();
    
    

    帮助我实现这一目标的资源:

    • 将 XML 内容保存到变量
    • 将字符串转换为 System.IO.Stream
    • 将 MemoryStream 保存到文件或从文件加载
  • 尝试一下:

    XMLDocument doc;
    
    ...
    
    string XMLstring = doc.OuterXml.Replace(" />","/>");
    
返回
作者最近主题: