2013-07-16 118 views
1

我試圖解析使用dom包中的XML文件,但這裏是我得到的錯誤:TCL XML解析錯誤

unterminatedattribute {invalid attribute list around line 4} 

下面是簡單的測試:

package require dom; 
set XML " 
    <Top> 
    <Name name='name' /> 
    <Group number=1> 
    <Member name='name1' test='test1' l=100/> 
    </Group> 
    </Top>" 
set doc [::dom::parse $XML] 

set root [$doc cget -documentElement] 

set node [$root cget -firstChild] 
puts "[$node cget -nodeValue]" 

回答

2

問題是你必須用"'來包含元素值。解決你的XML之後,解析是成功的。

我通常不使用dom包,而是使用tdom包。
tdom包有一個選項,可以實現鬆散分析。

3

「XML」實際上是正式無效;所有屬性值必須被引用。如果可以的話,解決這個問題。

set XML " 
    <Top> 
    <Name name='name' /> 
    <Group number='1'> 
    <Member name='name1' test='test1' l='100'/> 
    </Group> 
    </Top>" 

如果無法修復,您可以嘗試在而不是HTML模式下使用tDOM(這是一個很多 laxer約良構的限制,雖然它也較低情況下,所有元素和屬性名) 。請注意,即使對於您的特定輸入文檔,它仍然失敗:

% package require tdom 
0.8.3 
% set doc [dom parse -html $XML] 
error "Unterminated element 'group' (within 'member')" at position 114 
"> 
    <group number=1> 
    <member name='name1' test='test1' l=100/> 
    </group> <--Error-- 
    </Top>" 

修復您的文檔是要做的第一件事!

+0

我得到了一個例子,其中'<!'甚至打破了tdom的'dom parse -html' –

+1

在它變得完全無法解析之前,有多少破損可以嘔吐到「文檔」中。 [除了REs。](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454) –