2017-04-06 53 views
0

所以我遇到了這個XML文件,我想用C++讀取。它的標題信息看起來很奇怪,並且有很多這樣的文件。我似乎無法對散裝進行更改,因此我將不得不按照原樣讀取它。如何在C++中讀取這個XML文件?非標準(讀)「無效」XML

我也打開解析它直接使用ifstream。我想提取數據和數字。其中一個文件的內容如下:

<!DOCTYPE refSeg SYSTEM "isthisthereallife.no"> 
<refSeg src="skjkska.doc" how="dunno" willa="25820"> 
<trans type="IN1" pum1="2280" pum2="2281"/> 
<trans type="IN2" pum1="3495" pum2="3496"/> 
<trans type="IN3" pum1="4936" pum2="4937"/> 
</refSeg> 

我想在「pum1」,並在不同的變量「pum2」 /矩陣格式/列表中的號碼。還有另一個變量中的「類型」。

+2

如果您的「非標準」意思是「無效」,那麼您將與第三方XML庫進行抗爭 - 它們通常被設計爲僅允許有效的XML。您可以編寫自己的解析器(不要!),也可以執行必要的手術以首先將數據轉換爲有效的XML。 –

+0

但是我有這麼多文件,有沒有辦法通過ifstream直接讀取這些數據? –

+0

您可以通過任何標準機制閱讀它。但這是XML解析,這將是問題。 –

回答

1

通過討論「非標準」和「無效」XML,您令每個人都感到困惑。

關於您向我們展示的XML樣本沒有任何「非標準」。我們無法判斷它是否「無效」 - 全部取決於文件「isthisthereallife.no」中的DTD定義,該文件定義了XML文件允許包含的元素和屬性。

我懷疑當你說「非標準」時,你的意思是「我從來沒有見過一個DOCTYPE定義之前的XML文件」。

下一步取決於您是否可以找到DTD文件「isthisthereallife.no」,並且如果可以的話,還有關於允許的XML內容的說明。

作爲提問問題的一般提示,如果某些內容不起作用,您應該告訴我們您做了什麼以及它究竟是如何失敗的。

+0

嗯,這不是我的建議,你改變了帖子,所以請不要責怪我。如果你確實聽過了,你應該閱讀我的建議,也就是說在我們告訴你如何解析文件之前,我們需要知道DTD文件是否存在,如果存在,它是什麼。 –