XML 標籤以 fc:... 開頭的無法用節點名稱讀取 |
缺席
|
cancer
高階會員 發表:58 回覆:319 積分:190 註冊:2004-07-31 發送簡訊給我 |
各位好,對 XML 剖析不太熟,請幫忙一下。
我用 TXMLDocument 載入 XML 文件內容,節點交給 IXmlNode 來處理,標籤名稱沒有 fc: 開頭的,都讀得到,例如 ChildNode := MainNode.ChildNodes['SendingDate']; 但如果是,有 fc: 開頭的,例如這樣,就讀不到 ChildNode := MainNode.ChildNodes['fc:MessageIdentifier]; 最後只好改用迴圈來讀 for i := 0 to MainNode.ChildNodes.Count - 1 do begin i f ChildNode.NodeName = 'fc:MessageIdentifier' then ................... end; 我覺得這樣不方便,既然已經知道節點名稱,當然是直接用節點名稱來讀,程式看起來比較順眼,有人知道原因嗎? |
rick060
高階會員 發表:2 回覆:112 積分:217 註冊:2009-11-17 發送簡訊給我 |
xml 我沒用過delphi 內建的元件,我都是使用 msxml
對於有 namespace 的 tag 要先設定 property 才能讀取 以下例 var pXMLDoc : IXMLDOMDocument2; pRootNode : IXMLDOMNode; ~~~ hr := CoCreateInstance(CLASS_DOMDocument60, nil, CLSCTX_INPROC_SERVER,IID_IXMLDOMDocument, pXMLDoc); if FAILED(hr) then raise Exception.Create('MSXML2:CoCreateInstance Error'); hr := pXMLDoc.QueryInterface(IID_IXMLDOMNode, pRootNode); if FAILED(hr) then raise Exception.Create('MSXML2:QueryInterface Error'); IsSuccess := pXMLDoc.loadXML(szWorkingStr); if IsSuccess <> True then raise Exception.Create( '無效字串' ); pXMLDoc.setProperty('SelectionNamespaces','xmlns:h="http://www.w3.org/TR/html4/"'); //設定 namespace ,可多組 pRootNode := pXMLDoc.selectSingleNode( 'root/h:ID' ); ShowMessage( pRootNode.text ); ~~ 內建元件一定也有類似的方法,試試。 |
cancer
高階會員 發表:58 回覆:319 積分:190 註冊:2004-07-31 發送簡訊給我 |
rick大,這真是超不方便,如果同一份文件裡面標籤有很多種,每讀一個節點,都要先設定一次 name space。
我是用 Delphi 的 TXmlDocument,TXmlDocument 有關 namespace 的 Option 只有兩個,都跟建立節點有關,跟讀取無關。 還有一個狀況,程式碼如下,只需注意最後一行: RootNode : IXmlNode; ... RootNode := xmldoc.AddChild('X301InspectionApplication'); RootNode.Attributes['xmlns'] := 'urn:BOFT:X301X302X303X304Inspection:1.2'; RootNode.Attributes['xmlns:fc'] := 'urn:BOFT:FundamentalComponents:1.0'; RootNode.Attributes['xmlns:ft'] := 'urn:BOFT:FundamentalTypes:1.0'; RootNode.Attributes['xmlns:xsi'] := 'http://www.w3.org/2001/XMLSchema-instance'; RootNode.Attributes['xsi:schemaLocation'] := 'urn:BOFT:X301X302X303X304Inspection:1.2 X301X302X303X304Inspection.xsd'; 明明是打 xsi:schemaLocation,產生的 xml 檔,都變成 schemaLocation,前面的 xsi. 都會消失,最後,我只好用 TStringlist 把檔案讀進來,再把 xsi. 補上去,好麼煩,有誰知道原因? |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |