问题解析XML我需要解析一个HTML页面来提取一些信息,但我得到了意想不到的结果,请参阅下面的脚本。
HTMLPageAsText = "
<TITLE>String 1 i want to get</TITLE>
String 2 i want to get
<H2 id="toc-hId-1644617739" id="toc-hId-1644617739">Possibly also this</H2>
<H2 id="toc-hId--907539222" id="toc-hId--907539222">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-835271113" id="toc-hId-835271113">Possibly also this</H2>
<H2 id="toc-hId--1716885848" id="toc-hId--1716885848">why i get only this</H2>"
或者如果只能获得标签的内容,不包括我希望获得的子标签
PageBody="String 2 i want to get"
相反,我得到的是:
PageBody="why i get only this"
我究竟做错了什么?
Re:问题解析XML谢谢!
这将暂时做到。
但是对于未来的开发,On Element()调用的另一个命令(如XML Body())将返回标记的整个内容(包括嵌套的TAG作为文本)可能非常有用。
关于HTML vs XML的评论我明白了。如果网页变得更复杂,我会尝试用the替换
来处理它,因此它将符合XML。我甚至可以设想一个循环跟踪非闭合标签并用XML正确版本替换它们。但是,如果XML解析器会发出警告但是在出现错误的情况下继续执行,就像Web浏览器对错误的HTML所做的那样。
最后关于文档:我同意对于解析XML,docomentation有点微小,所以当你更新它时,请同时包含XML Attr()的第二个参数。目前文档只列出0和1属性,但是我找到(并使用)了一段使用2个参数的代码,第二个是未找到属性时返回的字符串。
我认为这是一个有用的功能,没有记录在meoment
谢谢。
Re:问题解析XML据我所知,你只是遗漏了一些可能从未记录过的东西:text()。类似于EndTag()。
HTMLPageAsText = "
<TITLE>one of four</TITLE>
two of four
<H2 id="toc-hId-25924487" id="toc-hId-25924487">three of four</H2>
<H2 id="toc-hId-1768734822" id="toc-hId-1768734822">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 =“四分之一”;
身体=“四个中的两个
四个四个中的三个“;
- 每次处理新的文本片段时都会运行Text()。
- HTML和XML通常不一样;您的示例有效,因为它也是有效的XML。如果在XML阅读器中使用,许多HTML命令(如
)都没有匹配的和break。
- 如果XML稍微复杂一些,您可能还需要跟踪嵌套级别。
(当我在如何做到这一点时,我重复了你的榜样。我会看看我是否可以记录下来,谢谢!)