2014-05-23 40 views
0

我從web服務接收到一個xml文件,但它帶有換行符和空格之間的空格,我需要刪除它們並將xml放在一行中的字符串中。 我已經嘗試使用TXMLDocument,但我只有我只能替換選項卡的空格。刪除xml文件的空格和換行符

爲例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; 
+2

爲什麼地球上你會「需要」將XML強制到一條線上? **(1)** XML標準特別要求可以在不影響數據含義的情況下添加或刪除空格。 **(2)**如果您(或客戶端)擁有無法處理額外空白的XML解析器:***請解析該解析器!***使用不合標準的解析器只會使長期困難。 **(3)**使用空格和換行符的XML實際上有一個優點:在一個不好的編輯器(如記事本)中可以讀取它們...... _您不應該爲XML格式化而煩惱 - 這是浪費時間_ 。 –

+4

爲什麼你需要刪除空格?這是合法的XML,你仍然可以解析它。 –

+0

因爲我需要使用第三方組件讀取xml並且不讀取帶有空格和制動線的數據。 – Rigotti

回答

2

TXMLDocument.Options屬性中刪除的doNodeAutoIndent標誌,並從TXMLDocument.ParseOptions財產poPreserveWhiteSpace標誌。

+0

沒有工作,或者我做錯了什麼。在問題中添加代碼 – Rigotti

+0

在加載XML之前更改'ParseOptions' * *,而不是*之後*。如果在解析完成後更改解析選項是毫無用處的。另外,請閱讀'TXMLDocument'文檔。當您創建TXMLDocument'的'的實例與零所有者,它作爲一個引用計數的接口,所以你需要使用'IXMLDocument'變量,而不是一個'TXMLDocument'變量,來維護引用計數。你的代碼正在泄漏'TXMLDocument'對象,假設它沒有遇到解析節點上內部引用的其他問題。 –

+0

我做了更改,但仍然無法正常工作 – Rigotti