【发布时间】:2014-05-23 16:50:34
【问题描述】:
我从 web 服务收到一个 xml 文件,但它带有换行符和标签之间的空格,我需要删除它们并将 xml 放在一行中的字符串中。 我已经尝试过使用 TXMLDocument,但我只能替换制表符的空格。
xml示例:
<CompNfse xmlns="http://www.sistema.com.br/Nfse/arquivos/nfse_3.xsd">'#$D#$A' <Nfse versao="">'#$D#$A' <InfNfse Id=" 00000000000670">'#$D#$A' <Numero>10</Numero>.....
使用 TXMLDocument
<CompNfse xmlns="http://www.sistema.com.br/Nfse/arquivos/nfse_3.xsd">'#$D#$A#9'<Nfse versao="">'#$D#$A#9#9'<InfNfse Id=" 00000000000670">'#$D#$A#9#9#9'<Numero>10</Numero>....
我需要多少
<CompNfse xmlns="http://www.sistema.com.br/Nfse/arquivos/nfse_3.xsd"><Nfse versao=""><InfNfse Id=" 00000000000670"><Numero>10</Numero>....
我试过的代码。
var sTemp : String;
oXml : TXMLDocument;
begin
try
sTemp := '<Nfse versao="">'+#13#10+' <InfNfse Id=" 00000000000670">'+#13#10+' <Numero>10</Numero>'+#13#10+' <CodigoVerificacao>82557.2TE79</CodigoVerificacao></InfNfse></Nfse>';
oXml := TXMLDocument.Create(nil);
oXml.Options := [];
oXml.ParseOptions := [];
oXml.LoadFromXML(sTemp);
sTemp := oXml.XML.Text;
finally
oXml := nil;
end;
end;
【问题讨论】:
-
您到底为什么“需要”将 XML 强制放在一行上? (1) XML 标准特别要求可以在不影响数据含义的情况下添加或删除空格。 (2) 如果您(或客户)有一个无法处理额外空格的 XML 解析器:摆脱那个解析器!从长远来看,解析器只会让生活变得困难。 (3) 实际上,带有空格和换行符的 XML 有一个优势:在紧要关头,它可以在记事本等糟糕的编辑器中读取...... 您永远不应该对 XML 的格式大惊小怪- 这是浪费时间.
-
为什么需要删除空格?它是合法的 XML,你仍然可以解析它。
-
因为我需要使用第三方组件来读取xml并且不读取带有空格和刹车线的数据。
-
空白处理从一开始就在 XML 中。如果组件的一致性不足以忽略它,请查找另一个组件。
-
Rigotti 我同意@Remy :如果第三方组件不能处理valid XML,那么不要使用该组件。或者联系供应商并告诉他们修复它。说真的,补偿供应商的错误不值得你花时间。您所做的任何事情都只会使您自己的流程复杂化:减慢速度并增加出现错误的机会......请听我的建议:这是为了您自己的利益。
标签: xml delphi delphi-2010