解析 XML 時出現問題我需要解析 HTML 頁面以提取一些信息,但我得到了意外的結果,請參閱下面的腳本。
HTMLPageAsText = "
<TITLE>String 1 i want to get</TITLE>
String 2 i want to get
<H2 id="toc-hId-1618931290" id="toc-hId-1618931290">Possibly also this</H2>
<H2 id="toc-hId--933225671" id="toc-hId--933225671">why i get only this</H2>
";
PageTitle="";
PageBody="";
Parse XML( HTMLPageAsText,
On Element( "title",
End Tag( PageTitle=XML text();show("Found title") )
),
On Element( "body",
End Tag( PageBody=XML text();show("Found body") )
),
);
show(PageTitle,PageBody);
我在變量 PageBody 中理想需要的是:
PageBody="String 2 i want to get
<H2 id="toc-hId-809584664" id="toc-hId-809584664">Possibly also this</H2>
<H2 id="toc-hId--1742572297" id="toc-hId--1742572297">why i get only this</H2>"
或者如果只能獲取標籤的內容(不包括我期望獲得的子標籤)
PageBody="String 2 i want to get"
而我得到的是:
PageBody="why i get only this"
我究竟做錯了什麼?
回复:解析 XML 時出現問題謝謝!
現在就這樣了。
然而,對於未來的開發,On Element() 的附加命令(如 XML Body())將返回標籤的全部內容(包括作為文本的嵌套標籤)可能非常有用。
關於 HTML 與 XML 的評論我明白了。如果網頁變得更加複雜,我會嘗試用
替換
來處理它,這樣它將符合 XML 規範。我什至可以設想一個循環跟踪非閉合標籤並用 XML 正確版本替換它們。然而,如果 XML 解析器能夠發出警告,但在出現錯誤時繼續執行,就像 Web 瀏覽器對錯誤 HTML 所做的那樣,那就太好了。
最後關於文檔:我同意,對於解析 XML,文檔註釋有點少,因此在更新它時,還請包含 XML Attr() 的第二個參數。目前文檔僅聲明可能有 0 和 1 屬性,但是我發現(並使用)了一段使用 2 個參數的代碼,第二個參數是如果未找到該屬性則返回的字符串。
我認為這是一個有用的功能,目前尚未記錄
謝謝。
回复:解析 XML 時出現問題據我所知,您只是缺少一些可能從未被記錄的東西:text()。與 EndTag() 類似。
HTMLPageAsText = "
<TITLE>one of four</TITLE>
two of four
<H2 id="toc-hId-238038" id="toc-hId-238038">three of four</H2>
<H2 id="toc-hId-1743048373" id="toc-hId-1743048373">four of four</H2>
";
title = "";
body = "";
Parse XML( HTMLPageAsText,
On Element( "title",
End Tag( title = XML Text(); )
),
On Element( "body",
Text( body = body || XML Text(); ),
)
);
show(title,body);
title = "四個之一";
body =“四個中的兩個
四中之三、四中之三”;
- 每次處理新的文本片段時 Text() 都會運行。
- HTML 和 XML 通常並不相同;您的示例之所以有效,是因為它也是有效的 XML。 許多 HTML 命令(例如
)沒有匹配的 ,如果在 XML 閱讀器中使用就會中斷。
- 如果 XML 稍微複雜一點,您可能還需要跟踪嵌套級別。
(當我對如何做感到困惑時,我重新設計了你的例子。 我看看是否可以將其記錄下來,謝謝!)