首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何让IXmlDomDocument2.XML正确转义引号?

如何让IXmlDomDocument2.XML正确转义引号?
EN

Stack Overflow用户
提问于 2011-02-04 07:10:23
回答 1查看 2.3K关注 0票数 1

我正在解决的一个问题是,从我们的程序导出的XML不能转义引号(将"转换为" ),从而导致接收端出现问题。它可以很好地转义&s和尖括号,但不能用引号。

当我深入研究XML导出代码时,我发现它是一个非常简单的IXmlDomDocument2 DOM接口。但是,当我到达通过调用.XML方法生成XML字符串输出的步骤时,我遇到了一个无法追踪的专有性墙,因为所有的工作都发生在C:\Windows\System32\msxml3.dll内部。

显然,微软的IXmlDomDocument2实现知道如何转义某些符号,但不知道如何转义其他符号。更糟糕的是,显而易见但丑陋的解决方案(在我调用.XML之前,通过递归遍历整个文档并将值中的所有引号都替换为'"‘来运行预处理步骤)将不起作用,因为.XML方法将看到其中的那些&s并对它们进行转义!有什么方法可以解决这个问题吗?

EN

回答 1

Stack Overflow用户

发布于 2011-02-04 07:55:04

代码语言:javascript
运行
复制
program Project2;

{$APPTYPE CONSOLE}

uses
  ActiveX,
  MSXML2_TLB,
  SysUtils;
var
  Dom : IXMLDOMDocument2;
  Root :  IXMLDOMNode;
  Attr : IXMLDOMNode;
begin
  CoInitialize(nil);
  try
    DOM := CoDOMDocument40.Create;
    Root := Dom.createElement('root');
    Attr := Dom.createAttribute('attr');
    Attr.text := '"';
    root.attributes.setNamedItem(Attr);
    root.text := '"Hello World"';
    DOM.appendChild(Root);
    writeln(Root.xml);
    readln;
  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;
end.

但现实情况是,你可能无法控制等式的另一边。因此,您可以执行以下操作来获得所需的行为:

代码语言:javascript
运行
复制
program Project2;

{$APPTYPE CONSOLE}

uses
  ActiveX,
  MSXML2_TLB,
  SysUtils;
function QuoteEscape(const v : String) : String;
begin
  result := StringReplace(V,'"','"',[rfReplaceAll]);
end;


var
  Dom : IXMLDOMDocument2;
  Root :  IXMLDOMNode;
  Attr : IXMLDOMNode;
begin
  CoInitialize(nil);
  try
    DOM := CoDOMDocument40.Create;
    Root := Dom.createElement('root');
    Attr := Dom.createAttribute('attr');
    Attr.text := '"';
    root.attributes.setNamedItem(Attr);
    root.text :=  QuoteEscape('"Hello World"');
    DOM.appendChild(Root);
    writeln(StringReplace(Root.xml,'"','"',[rfReplaceAll]));
    readln;
  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;
end.
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4892834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档